<B>
                        ECL - Energy Control Language
                        =============================
                                     U1601
                        =============================

        Gossen-Metrawatt GmbH, Thomas-Mann-Str.16-20, D-90471 Nrnberg

        Copyright(c) 1991-2002 by HR, Hans Rffler Computer Hard+Soft,
                                  D-76137 Karlsruhe


Alle hier genannten Informationen lassen sich direkt von einer U 1601 Station
per Terminal abrufen.

______________________________________________________________________________

Verzeichnis der ECL-Interpreter-Befehle:
-----------------------------------------------------------------04.06.2002---
Medaten:       Eges Pmom Eint Pint  Etag Emon Ejahr  Ptag Pmon Pjahr
                Emax EmaxTag EmaxMon EmaxJahr  Pmax PmaxTag PmaxMon PmaxJahr
Medatenliste:  Eint Pint FORMAT INDEX SYNC
Analogwerte:    ANA ANAMIN ANAMAX ANAFAKTOR ANAOFFSET ANAMODE
Stationsparam.: STATION GRUPPE  STATUS  RELAIS  PEGEL  SPRACHE DATUMFORMAT
                TARIF TARIFQUELLE TARIFFIX KOSTFAK
Kanalparameter: KMODE KANAL LNAME Eeinh Peinh ZKONST URAT IRAT PFAKTOR
                EINAUS STARTSTOP KFIX KFAKTOR FLANKE PULS
Virt.Kanle:    DVSUM DVIRT DELTA
Mathematik:     SQRT SIN COS ASIN ACOS DEG RAD EXP LOG LOG10 **
                ABS FRAC FIX INT INTR MAX MIN MOD
Stack-Op's:     + - * /  & | ^ ~  && || ^^ ~~  SHR SHL  < <= > >= == !=
                DUP DROP SWAP PICK STKS PRINT !
Verzweigungen:  IF IFF ELSE ENDIF
Schleifen:      ALL ALS NEXTA  FORI I NEXTI  DO DOWHILE  EXIT  RETURN  PAUSE
Programme:      P PLIST  H HLIST HBREAK  HTD  ERR ERRNR LERR  REM
                MENUAPP  EVENTAPP LISTEVENTs
Variablen:      A ALIST  B BLIST
COM:            TX1 TX2  COMLOCK COMOPEN SETCOMS  DCF
ECS-LAN:        BUS DIR DIRN DIRS INDIR KENN SETKENN SYSTEST
LON:            LONID LONZW LONSTOP LONStatTiming LONPollDelay
Zeitbefehle:    ZEIT DATUM  TM TMD  HTD  LASTUPD  VON BIS DAUER  SOWI
sonstige:       AUFZ FINDER DELIMITER DISPLAY MELD TASTE VER ERRSTAT ERRKAN
                PASSWORT LOGIN LOGOUT WHOAMI
------------------------------------------------------------------------------
Allgemein: INFO  SYNTAX  EXTENSION  PARAMETER  STRINGS  STACK  KENNUNG  RS232
Spezielle Hilfe mit:  HILFE <befehlsname>  oder  ? <befehlsname>

______________________________________________________________________________

Allgemeine Informationen zur Verwendung der ECL-Interpreter-Befehle:

Abbrechen einer laufenden Ausgabe:  ^X  (STRG und X gleichzeitig)

Abbrechen der Ausgabe von Hintergrundprogrammen:
- Eingaben sind trotz der Ausgabe mglich
- Abbruchbefehl: siehe HBREAK (16s Pausieren der H-Programme)
- Das Steuerzeichen ^B schaltet das Vermischen der H-Programmausgabe fr
  10s aus (H-Programm-Ausgaben in dieser Zeit werden ignoriert).

Abrufen spezieller Hilfstexte:
- Soweit eindeutig, mssen nicht alle Buchstaben des Suchbegriffes einge-
  geben zu werden.
- Fr einige Befehle gibt es Kurzformen (Angabe in Klammern);
  die Befehlssuche funktioniert auch fr die Befehls-Kurzformen.
- Komplette Ausgabe aller Hilfstexte: ? BUCH

Kompatibilitt:
- Die implementierte ECL-Version ist aufwrts-kompatibel zum ECL der
  U1600/10/15-Stationen.
  Neue Befehle oder Befehlsformen, die bei den U1600/10/15-Stationen
  nicht verfgbar sind, sind wie folgt gekennzeichnet:
  (U1600: n.v.) : nicht verfgbar
  (U1600: b.v.) : beschrnkt verfgbar, d.h. nur bei direktem COM-Zugang ber
                  U1600/10/15 NICHT verfgbar.

______________________________________________________________________________

ECL - SYNTAX, metasprachliche Begriffsdefinitionen:
===================================================
<abcd> :=       : Begriffsdefinition
[ ]             : optionale Angaben
<ab> | <cd>     : Alternative
{ .. }          : Liste
[..]^           : Wiederholung (>=0)
{..}^           : Wiederholung (>=1)
__              : Leerzeichen

<befehlsfolge> := <kennung><befehl> [ , | ; <befehlsfolge>]
<befehl>  := <text><ext> [__<par>[__<par>[__..]]] [=[<par>[__<par>[__..]]]]

<kennung>       :=  {A AA A1 .. A9 AN B B1 .. B9 C .. Z4 ZZ} : | :: [__]
<ext>           :=  [{  ! + - # . * % / ^ $ _ ? | @  }]^
<par>           :=  <real> | <zeichenkette> | <aufzhlung> | . | $
<real>          :=  <integer>[ E <integer>]
<integer>       :=  [- | +]{0 .. 9}^
<zeichenkette>  :=  [" | ']  <text> [__<text>]^  [' | "]
<text>          :=  {a .. z A .. Z 0 .. 9 _ - +}^
<aufzhlung>    :=  { * ** # ## <kanal> } [ .. | + | - | ^ [ <kanal>]]^
<kanal>         :=  <integer> | {V1 .. V8}

______________________________________________________________________________

Die Extension <ext> beeinflut das Verhalten der Befehle. [Beispiele  siehe]
=============                                             [  EXTBEISPIELE  ]
Normalerweise gelten folgende Regeln:
-   :   Ausgabe unterbinden (falls vorhanden)
--  :   Ausgabe umleiten in die Ablage
+   :   Ausgabe direkt anschlieen, ohne "neue Zeile" zu Beginn
!   :   erzwingt Ausgabe (Beispiel: P! 3  listet Programm P3)
%   :   der 1. Parameter formatiert die Ausgabe (s. PRINTFORMAT)
&   :   Die Kennung wird zustzlich am Zeilenanfang ausgegeben    (s. KENN)
*   :   Befehls-Modifikation, zB: Impuls- statt Energie-Ausgabe   (s. EGES)
@   :   Befehls-Modifikation (abhngig vom jeweiligen Befehl)
_   :   Harmonisierte (zurckschreibare) Ausgabe von Energie-Befehlen
|   :   zustzliche Ausgabeformat-Option (s. EGES)
.   :   Ausgabe fr Datenbanken mit Trenner ';' und Abschlu <CR><LF>
..  :   wie .   jedoch mit Trenner ';' zwischen Ausgabeblcken
... :   wie ..  jedoch Trennen mehrerer Zeilen statt mit <CR><LF> mit ';'
#   :   Ausgabe nur des Hauptwertes. ## und ### ist analog zu .. und ...
$   :   zusammen mit . oder # erfolgt Ausgabe von Namen in "" ($$ : auch Zeit)
/   :   Ausgabe mit Zeitangabe (weitere Infos: siehe VON oder BIS)
^   :   Ausgabe mit Zeitangabe als Sekundenzahl ab 1.1.1990
?   :   Ignorieren der Fehlermeldung "Funktion nicht verfgbar"

______________________________________________________________________________

Beispiele zur Verwendung der Extension

EGES    1+V2      :     EGes (01:Raum501 ) = 874.01 kWh
                        EGes (V2:Raum777 ) = 12.74 kWh
EGES.   1+V2      :     EGes;1;Raum501;874.0124;kWh
                        EGes;26;Raum777;12.739;kWh
EGES..  1+V2      :     EGes;1;Raum501;874.0124;kWh;EGes;26;Raum777;12.739;kWh
EGES#   1+V2      :     874.0124
                        12.739
EGES##  1+25+V2   :     874.0124;100;12.739
EMON_   1 2       :     EMon 01 2 = 500.00 kWh          [rckschreibbar]
EMON*   1 2       :     EMon* (01:Raum501 ) = 50000.00  [Impulsanzahl]
EMON//  1 2       :     01.09.92 00:00:00--01.10.92 00:00:00  EMon-2 (01:...
EMON/## 1..4 2    :     01.10.92;00:00:00;500;1.1234;7555;0.0001
EMON^## 1..4 2    :     86745600;500;1.1234;7555;0.0001

INTERVALL&        :     A:INTERVALL = 15 Minuten

______________________________________________________________________________

Befehle nehmen folgende PARAMETER an (Beispiele):

Allgemeine Zahlenangaben:
=========================
  -12.34E3      : <real>
  8             : <integer>
  0x12ab        : <hexadezimal> (32 Bit)
  0b100101      : <binr>       (32 Bit)
  .             : vom Stack
  i             : aktuelle i-Zhlervariable, j+k analog         (U1600: b.v.)
  t             : Echtzeit-Sekundenzahl mit 1/1000s Anteil      (U1600: b.v.)
  t_            : Betriebsstundenzhler-Sekundenzahl "  "       (U1600: b.v.)
                  Bitte beachten Sie den Stations-Bezug von
                  Zeitabfragen, siehe ZEIT.

Allgemeine Zeichenketten:
======(s. STRINGS)=======
Hallo           : <string>
"Hallo 'Welt'"  : <string> mit "" begrenzt, da Leerzeichen enthalten sind
$               : aus String-Ablage (Clipboard)

Aufzhlungen:   [Suchen nach Namen siehe FINDER]
=============   <aufzhlung> Bereich : 1..64 oder (wenn mglich) 0..63
  2..9+15+17    : 2 bis 9 und 15 und 17
  5+V1..V4      : 5 und V1(=25) bis V4(=28)
  2..16-5-8+24  : 2 bis 16 und 24, ohne 5 und 8
  *             : alle EINgeschalteten Kan.(s.EINAUS). Falls Bezug fehlt: '**'
  #             : alle formattierten Kanle (s.FORMAT)
  **            : 1 bis 32
  *-3..6        : alle '*', jedoch ohne 3 bis 6
  *+7^+10..12   : Komplement von (alle '*' und 7) plus 10 bis 12
  .             : ein Element vom Stack (5/4 gerundet, siehe unten)
  ..            : eine Aufzhlungszahl vom Stack, siehe AUFZ
  i             : aktuelle i,j oder k-Zhlervariable            (U1600: b.v.)

Gertespezifische Aufzhlungen: (ab ECSys V2.45)                (U1600: n.v.)
===============================
  *AA           : alle Analog-Ausgangsmodule     (AnaMODID == 2)
  *AE           : alle Analog-Eingangsmodule     (AnaMODID == 1)
  *EN           : alle ENergie-Kanle            (KMODE == 2..4)
  *EV           : alle mglichen EventApplikations (EVENTAPP)
  *ERR          : alle Kanle mit ERRKAN <> 0
  *ERIS         : alle Kanle mit INSERVICE <> 0 (ERRKAN-24)
  *LA           : alle LON-Analog-Eingangskanle (KMODE == 5,6 == LonAna,LonPE)
  *LI           : alle Lon-Binre-Eingangskanle (KMODE == 7 == LonInp)
  *LO           : alle Lon-Energiezhler-Kanle  (KMODE == 4 == LOn)
  *LR           : alle Lon-Relais-Kanle         (KMODE == 8 == LonRel)
Hinweise:
- Diese Spezialaufzhlungen sind gerteabhngig, d.h. vom Adresskontext
  des Befehls abhngig.
- Die Gro-/Kleinschreibung ist unwichtig.
- "." nimmt ein einzelnes Aufzhlungselement vom Stack, hierbei wird die
  Zahl 5/4 gerundet (ab 04/2002). Bis 03/2002 wurden lediglich die Nachkomma-
  stellen entfernt (problematisch bei kleinsten Abweichungen, z.B. 1,999999).
- Die ermittelte Aufzhlung kann beliebig erweitert werden, doch darf pro
  Aufzhlungsausdruck nur eine spezifische Aufzhlung angegeben werden.
        Aufz *LR+*LI            : nicht zulssig (Ergebnis entspricht *LI)
        Aufz *LR+3^             : durchaus mglich (Inverses von *LR + Kanal 3)
- Kann die Aufzhlung von der angesprochenen Station nicht ermittelt werden,
  so werden keine Elemente aufgezhlt.

______________________________________________________________________________

Systemweites Suchen von Kanalnamen, Relaisnamen oder Stationsnamen:

- Statt <aufzhlung> lt sich bei kanalbezogenen Funktionen der Name des
  gesuchten Kanals angeben (auch fr Relaisnamen bei REL... und Stations-
  namen bei KENN). Der Suchbegriff wird im gesamten ECS-LAN-Verbund gesucht,
  angefangen bei der Prompt-Station.
- Der Suchbegriff mu mit einem Buchstaben beginnen, ansonsten mu ein '$'
  vorangestellt werden.
- "name*" sucht das erste Auftreten von "name....", Gro-/Kleinschreibung
  unwichtig. "name**" gibt alle passenden Kanle von der ersten mglichen (!)
  Station aus.
- <suchbegriff>& sucht nur auf aktueller Station.
- <suchbegriff>@ unterdrckt '..nicht gefunden' Meldungen.

FINDER (FI) : Funktion zum Ermitteln von Stationsdetails zu einem Suchbegriff.

Aufruf  : FINDER <suchbegriff>
Stack   : - >>> <kanalnr> <kennungszahl> <1:gefunden/0:nicht-gefunden>
Ext.    : * (Suche nach Relaisnamen)      @ (Suche nach Stationsnamen)

______________________________________________________________________________

STRINGS (=Zeichenketten)

Einfgen von Sonder-/Kontrollzeichen in Strings mit '\' Prefix:
\#      :  "                    \"      :  "
\|      :  '                    \'      :  '
\\      :  \
\b      :  0x08 Backspace
\l      :  0x12 ^L
\n      :  0x0A (LF)
\r      :  0x0D (CR)
\t      :  0x09 (TAB)
\nnn    :  nnn= '3 stellige Dezimalzahl' entsprechend dem Zeichencode
\000    :  nichts einfgen                                      (U1600: b.v.)
\-      :  restliche Zeichen nicht mehr umwandeln (%..., \...)  (U1600: b.v.)

- nicht genannte Zeichen:  \z ---> z
- Die Umformung der Metacodes in die entsprechenden Zeichen findet
  bei der ZUWEISUNG eines Strings NICHT statt (Ausnahme: \" und \'):
    p='! "Buchstabe \#\065\#"' , p!     : P 0='! "Buchstabe \#\065\#"'
    p                                   : Buchstabe "A"

______________________________________________________________________________

Parameter-Stack
===============
Der Parameter-Stack ist ein Kellerspeicher, der zur bergabe von Zahlen-
Parametern zwischen Befehlen fungiert. Der Stack lt sich mit bestimmten
Befehlen manipulieren (DUP DROP PICK SWAP ...), Befehle entnehmen dem
Stack Werte (pop) und fgen auch wieder welche hinzu (push).

Stacktiefe:    63
Datentyp  :    <real> : 64 Bit Fliekommazahl (15 signifikante Dezimalstellen)

Das Stack-Verhalten ist elementarer Teil der Befehlsbeschreibung.
Allgemein gilt: Beim Schreiben (Verwenden des '=' Zeichens) werden auf
dem Stack NIE WERTE ABGELEGT (Push).

Hinweis: Der Stack und die Zwischenablage gelten nur whrend der Abarbeitung
einer Zeile (Verschachtelungen mit P-Programmen mglich). Sobald der
Prompt zurckkehrt, wird der Stack gelscht. Dadurch wird eine konsistente
Programmierumgebung ermglicht.

Zwischenablage
==============
Fr Zeichenketten (STRINGS) existiert ein Zwischenspeicher ("Ablage" oder
"Clipboard"), der beim Lesen stets das letzte Zeichenketten-Ergebnis be-
inhaltet. So legt z.B. der Befehl STATION beim Lesen den Stationsnamen in
der Zwischenablage ab. Bezugnahme auf die Zwischenablage in Parametern: '$'

Variablen
=========
Zur dauerhaften Speicherung von <real> Zahlen stehen 64 Register A0 .. A63
sowie 64 Register B0 .. B63 zur Verfgung (siehe A, B).

______________________________________________________________________________

Jede Summenstation besitzt eine eindeutige KENNUNG.
Es gibt 255 Kennungen:  A, A1..A9, B, B1..B9 ... Z4
sowie mehrere Spezialkennungen:
AA:     Kennung der mit der RS232 Schnittstelle verbundenen Station
ZZ:     Kennung der durch den Interpreter-Prompt angegebenen Station
AN:     holt Kennung als Zahl vom Stack (A==1 .. Z4==255)
--------
AP:     Kennung des zum Zeilenkontext-REG-D zugehrigen PAN-D
AR:     Kennung des zum Zeilenkontext-PAN-D zugehrigen REG-D

A1::<befehl>   oder   A1::      : vollstndige Kennungs-Kontext-Umschaltung
A1: <befehl>   oder   A1:, ...  : schaltet Kontext nur fr aktuelle Zeile um
A1:<befehl>                     : Kennung gilt nur fr diesen <befehl>

Beispiel fr die Spezialkennung ZZ:
  Eingeloggt in eine entfernte Station wird ein P-Programm gestartet. P
  enthlt eine ALL-Schleife, in der ein weiteres P-Programm, das sich auf der
  selben logischen Station befindet, aufgerufen wird. Da innerhalb der
  ALL-Schleife der Bezug auf eine feste Station nicht vorhanden ist, bietet
  ZZ: die Mglichkeit, diesen festen Bezug wieder herzustellen, ohne explizit
  die Station nennen zu mssen !
  <C> .. All, .. , P 15, ...    ruft P 15 von ALLEN Stationen auf
  <C> .. All, .. , ZZ:P 15, ... ruft P 15 nur von Station C: auf

______________________________________________________________________________

RS-232 Schnittstellen-Protokoll:
^M  (RETURN)      13d   : sendet die Eingabezeile ab, nach der Antwort kommt
                          der System-Prompt ( zB: <A1> )   [kein Prompt: ^W^M]
^J  (CTRL-RETURN) 10d   : wie RETURN, nur statt dem Prompt kommt ^Z (SUB,26d);
                          (geeignet fr Host-Verbindung und zusammen mit ^V)
^X  (CAN)         24d   : Abbruch der Ausgabe, Lschen aller Puffer und Flags
^Y  (EM)          25d   : Zeile lschen, keinerlei Ausgabe
ESC               27d   : Zeile lschen, Cursor geht in neue Bildschirmzeile
---- Protokoll-Flags ----
^B  (STX)         02d   : unterdrckt Eingabe-Echos fr laufende Zeile.
^A  (SOH)         01d   : Vormerken fr kodierte Fehlerausgabe:  ^A nnn
^A^A                    : wie ^A, jedoch mit Fehler-Text:        ^A <ErrText>
^V  (SYN)         22d   : Lschen der internen Prfsumme und
                          Vormerken fr Ausgabe mit "Prfsumme nach SUB"
^V^V                    : Nach ^M oder ^J mu Prfsumme folgen,Antwort:ACK/NAK

-  Protokoll-Flags ^A, ^V und ^B gelten stets nur fr den nchsten Befehl.
-  ^V und ^B unterbinden Mischung der H-Programmausgaben fr 10s+Befehlsdauer.
-  Prfsumme: Addition auf 16Bit INT, feste 4-stellige Darstellung in HEX.

______________________________________________________________________________

                           ECL - Befehlsreferenz
                           =====================

______________________________________________________________________________

+ - * / **  < <= > >= == !=  & && | || ^ ^^ XOR  !
==================================================
+  :    a  b >>> (a+b)
-  :    a  b >>> (a-b)
*  :    a  b >>> (a*b)
/  :    a  b >>> (a\b)
** :    a  b >>> (a hoch b)

>  :    a  b >>> (Vergleich a > b)              [WAHR= 1, FALSCH= 0]
>= :    a  b >>> (Vergleich a >= b)
<  :    a  b >>> (Vergleich a < b)
<= :    a  b >>> (Vergleich a <= b)
== :    a  b >>> (Vergleich a gleich b)
!= :    a  b >>> (Vergleich a ungleich b)

&  :    a  b >>> (a logisch-UND b)      && :    bitweises UND  (32 Bit)
|  :    a  b >>> (a logisch-ODER b)     || :    bitweises ODER (32 Bit)
^  :       a >>> (logisch-NOT a)        ^^ :    bitweises Complement (32 Bit)
XOR:    a  b >>> (a 32bit-bitweises-XOR b)      [XOR: Exklusiv ODER]

!  :    Stack-Ausgabefunktion nimmt eine Zahl vom Stack und gibt diese aus.
        Weitere Mglichkeiten des !-Befehls: siehe PRINT

Bit-Shifts und Umwandlungen Binr/BCD
=====================================
SHL     :: a n >>> (Shift-32bit-Left  n*)       SHL <n> :: a >>> (Sh... n*)
SHR     :: a n >>> (Shift-32bit-Right n*)       SHR <n> :: a >>> (Sh... n*)

BIN2BCD :: bin >>> bcd          Binr --> BCD; Beispiel: 1234 >>> 0x1234
BCD2BIN :: bcd >>> bin          BCD --> Binr; Beispiel: 0x1234 >>> 1234

Hinweise:
- mit "::" gekennzeichnete Befehle sind bei U1600/10/15 nur beschrnkt
  verfgbar (U1600: b.v.).
- bei logischen Vergleichen gilt:  FALSCH: gleich 0.0, WAHR: ungleich 0.0

______________________________________________________________________________

Zahlenmanipulationen: ABS FRAC INT INTR MIN MAX MOD

               Stack:
ABS     :     x  >>>  Betragsfunktion(x)
FRAC    :     x  >>>  gebrochener Teil(x)
INT     :     x  >>>  Ganzzahlteil(x)
INTR    :     x  >>>  5/4 gerundeter Ganzzahlteil(x)
MIN     :  a  b  >>>  (die kleinere Zahl von a und b)
MAX     :  a  b  >>>  (die grere Zahl von a und b)
MOD     :  a  b  >>>  (a modulo b)

______________________________________________________________________________

A 0 .. A 63     : Register A 0 .. A 63 fr <real> Zahlen
B 0 .. B 63     : Register A 0 .. A 63 fr <real> Zahlen

Aufruf  : A <aufz> [= <wert>]
Ausgabe : nein,                 ja mit Ext.:   + # . % !
Stack   : -  >>> <inhalt_Ai>    bei Aufzhlungen wird Summe gebildet
Ext.    : + - # . % !   ++ --

- A ohne <aufz> entspricht A 0
- A1 .. A63 entspricht A 1 .. A 63,  A5! entspricht A! 5
- Inkrementieren (+1)   :       A++ <aufz>   :  - >>> <A+1>
- Dekrementieren (-1)   :       A-- <aufz>   :  - >>> <A-1>
- A = A + <wert>        :       A++ <aufz>=<wert>
- A = A - <wert>        :       A-- <aufz>=<wert>
- <wert>=={t|z} weist auch bei U1600/10/15 die aktuelle Sekunden-Zeitzahl
 (mit 1/100s Auflsung) zu.

ALIST   oder    ALIST <aufz>    : listet A-Register (entspricht  A! *)

______________________________________________________________________________

ALL  NEXTA (NA)  : Programm-Schleife "alle Kennungen"
=====================================================
Diese Schleifenkonstrukt ermglicht das Ansprechen aller Stationen.
Es gibt keine Laufvariable, die aktuelle Kennung fr die Zeile wird
hochgezhlt (nur Kennungen von Stationen im ECS-LAN).

Aufruf  : ALL [<vonKennungsnr> [<bisKennungsnr>]]       NEXTA
Ausgabe : nein                                          nein
Stack   : - >>> -                                       - >>> -
Ext.    : -             : Auslassen der Station mit der Prompt-Kennung

Aufruf  : ALL [<vonKennung>: [<bisKennung>:]]           (U1600: b.v.)
Aufruf  : ALL [<auswahl>]                               (U1600: b.v.)

- Mit <auswahl> : { A | B | U | R | P | * } wird die Gerteliste auf eine
  bestimmte Gerteklasse eingeschrnkt (siehe DIR).
- Beim Aufruf von lokalen P-Programmen innerhalb der ALL-Schleife bitte
  das Beispiel fr Spezialkennung ZZ: beachten (siehe KENNUNG).
- Zur Demonstration des inneren Ablaufes von ALL... siehe Beipiel bei INDIR.

Beispiele:
  ALL , eges 1, nexta     Ausgabe: Eges Kanal-1 aller Gerte
  ALL-, eges 1, nexta     Ausgabe: Eges Kanal-1 aller Gerte auer Prompt-Gert


ALS  NEXTA (NA)  : Programm-Schleife "alle Kennungen laut Liste" (U1600: b.v.)
================================================================
Diese Schleifenkonstrukt ermglicht das Ansprechen aller Stationen einer Liste.
Es gibt keine Laufvariable, die aktuelle Kennung fr die Zeile wird der
Reihe nach aus der Liste ausgewhlt. Mit der Ext.'+' werden auch Kennungen
ausgewhlt, die nicht im ECS-LAN Directory eingetragen sind.

ALS[+] <liste>, ..., NEXTA
--------------------------
ALS <liste>             : ALL-Schleife mit allen Stationen in <liste>
ALS+ <liste>            : mit Ext.'+' wird das ECS-LAN Directory nicht beachtet
ALS <liste> <auswahl>   : Einschrnkung gem <auswahl>, Ext.'+' ist
                          hier nicht mglich.
Hinweise:
  Syntax von <liste>    : {[{<not_alpha>}^]<kennung>}^{<not_alpha>}^
  Syntax von <kennung>  : <alpha>[<digit>]
  Beispiel fr <liste>
        AB1CD8Z3        A:B1:C:D8:Z3    "A:; B1;  CD8, Z3"
- Reihenfolge der Stationen: entsprechend der <liste> von links nach
  rechts, Mehrfach-Nennungen werden beachtet.
- Zufhrung der <liste> aus der Zwischenablage:         ALS $

ALS_<gruppe>[+] [<auswahl>], ..., NEXTA
ALS_[+] <gruppe> [<auswahl>], ..., NEXTA
----------------------------------------
Statt einer Liste wird hier eine festgelegte Gruppe verwendet. Die jeweiligen
Gruppennamen sind vom Stationstyp abhngig. Die Reihenfolge der Stationen
entspricht der jeweiligen Gruppenliste, Mehrfach-Nennungen werden beachtet.

Beispiel (<gruppe> = PARGR):
ALS_PARGR, ..., NA      : Durchlaufen aller Stationen der Gruppe, sofern sie
                          im ECS-LAN Directory vorhanden sind.
ALS_ PARGR, ..., NA     : alternative Schreibweise. Diese allgemeinere Form
                          ermglicht die Zufhrung von <gruppe> ber die
                          Zwischenablage ($):   ALS_ $
ALS_PARGR+, ..., NA     : Durchlaufen aller Stationen der Gruppe, auch wenn
                          sie nicht im ECS-LAN Directory vorhanden sind.
ALS_+ PARGR, ..., NA    : alternative Schreibweise.

- Achtung, die Gruppen sind stationsabhngig. Ist der Kennungskontext beim
  Aufruf von ALS_<gruppe> nicht bekannt, kann durch Voranstellen von AA: der
  Kontext des physikalischen Gertes (AA:ALS_<gruppe>, ..., NEXTA), durch Vor-
  anstellen von ZZ: der Kontext des Zeilenprompts erzwungen werden.

______________________________________________________________________________

Analog-Verarbeitung
===================

Analog-Eingnge:
----------------
- Aus einer analogen Leistung wird mit AnaMODE=2 die Energie ermittelt.
- Zum Zhlen von Impulsen wird AnaMODE=3 verwendet. Hier kann mit INPUT der
  Zustand der Eingangs abgefragt werden {0|1}. Der Befehl PEGEL bestimmt
  die Schaltschwelle:  0=10%,  1=25%(Vorgabe),  2=50%,  3=70% von Fullrange.
  PULSDAUER wird zur Bestimmung des Eingangszustandes verwendet.
- STARTSTOP beeinflut die Energie-Berechnung bei AnaMODE= 2 oder 3.
- Mit AnaMODSEL wird die Eingangs-Charakteristik ausgewhlt (das Gert
  mu zustzlich hardware-seitig umgestellt werden):
        0: -10..0..+10 V        1: -20..0..+20 mA       2: -5..0..+5 mA
        3: S0                   4: 4..20 mA (20mA Bereich)
- U1601 stellt 12 Eingnge auf Kanal 1..12 bereit.
- U1615 stellt max. 7 Eingnge auf Kanal 1..7 bereit.
- REG-D/PAN-D stellen max. 6 Eingnge auf Kanal 1..6 bereit.

Analog-Ausgnge:
----------------
- U1601 stellt zwei Ausgnge auf Kanal 13+14 bereit.
- U1615 stellt max. 7 Ausgnge (nur unipolar) auf Kanal 1..7 bereit.
- REG-D/PAN-D stellen max. 6 Ausgnge auf Kanal 1..6 bereit.
- Mit AnaMODSEL wird die Ausgangs-Charakteristik ausgewhlt.
  Fr U1601 gilt (das Gert mu ggf. hardware-seitig umgestellt werden):
        0: -10..0..+10 V        1: -20..0..+20 mA
        4: 4..20 mA (20mA Bereich)
  Fr U1615 gilt:
        0: 0..+20 mA            1: 4..20 mA (20mA Bereich)
  Fr REG-D/PAN-D gilt:
        1: -20..0..+20 mA       4: 4..20 mA
- Mit dem Befehl AnaINT (mit n > 0) wird eine sekundengenaue Schleppzeiger-
  Mittelwertbildung aktiviert. Der Ausgang und ANA (lesend verwendet) liefern
  stets den Mittelwert der zugewiesenen ANA-Werte der letzten n Sekunden.
  AnaINT ist bei U1601/REG-D Versionen ab dem 08.11.99 verfgbar.
- Der Befehl AnaRESO ist ohne Bedeutung (bei U1615 auch AnaMAX und AnaMIN),
  AnaMODE 2,3 ist nicht zulssig.

Relais-Ausgnge (nur U1615):
----------------------------
- Nur die Befehle AnaModID und AnaRelMap sind sinnvoll.
- U1615 stellt max. 7 Relais-Ausgnge (Arbeitskontakt) auf Kanal 1..7 bereit.

Allgemein:
----------
- Ext. '?' ( ANA? 1 ) unterdrckt Fehlermeldung "Funktion nicht verfgbar"
  auf Stationen, die keine Analogverarbeitung bieten.
- Mit (*) gekennzeichnete Befehle sind bei U1615 nicht verfgbar.

ANA <kanal>                     Analoger Eingang, skaliert
ANA <kanal> = <wert>            Analoger Ausgang
AnaN <kanal> [= <wert>]         Analog-E/A, -1..0..+1 normierter Wert (*)
AnaR <kanal> [= <wert>]         Analog-E/A, Roh-Wert entsprechend AnaModSel (*)
AnaRS <kanal> [= <wert>]        Analog-E/A, Roh-Wert entsprechend AnaModSel,
                                Vorzeichenbereich (siehe AnaSSEL) jedoch
                                nicht eingeschrnkt (*).
AnaMAX <kanal> [= <wert>]       Maximum (mit Zeitstempel: ANAMAX/ <kanal>)
AnaMIN <kanal> [= <wert>]       Minimum (Zeitstempel neu: ANAMIN/ <k> = <w>)
AnaMAXN, AnaMINN                Maximum/Minimum, Wertebereich wie AnaN (*)
AnaMAXR, AnaMINR                Maximum/Minimum, Wertebereich wie AnaR (*)
AnaMMCLR <kanal> = 0            Lschen des Maximums und Minimums (*)
                                (ANAMAX = ANAMIN = ANA, Zeitstempel neu)
AnaFACTOR <kanal> [= <wert>]    ana = (normierter_eingang * FACTOR)+OFFSET
AnaOFFSET <kanal> [= <wert>]           0 --> 0.0; +/-Fullrange --> +/-1.0

AnaUSEL <kanal> [= <wert>]      Ana-Einheit, <wert>: 0=keine, 1=EEinh, 2=PEinh
                                3=AEinh (AEinh bei U1615 nicht verfgbar)
AnaFIX  <kanal> [= <wert>]      Fixpunkt des Analogwertes (*)
                                0: 0            1: 0.0          2: 0.00
                                3: 0.000        9:Fliekomma
                                (Fliekomma bei <wert> : 4..9)
AnaSSEL <kanal> [= <wert>]      Vorzeichen-Bereichseinschrnkung (SignSelect),
                                angewendet auf den normierten, jedoch noch
                                unskalierten Analog-Wert.
                                <wert>: 0= +/-,  1= +,    2= -
AnaRESO <kanal> [= <wert>]      Auflsung in Mepunkten. Vorgabe: 2000
AnaINT <kanal> [= <wert>]       Mittelwertbildungsintervall in Sekunden (*)
                                0    : Standard-Momentanwert
                                1..60: Schleppzeiger-Intervall (Analog-Ausgang)
AnaModID <kanal>                Modul-Typ (nur Abfrage)
AnaModSN <kanal>                Modul-Seriennummer (nur Abfrage)
AnaModDC <kanal>                Modul-Datumcode (nur Abfrage)
AnaModSel <kanal> [= <wert>]    Modul E/A-Charakteristik

AnaRelMap <modul> [= <relais>]  Umlenken von Relais-Modulen auf Relais-Nummern
                                <relais>                           (nur U1615)
                                0     : Identitt
                                1...7 : <modul> wird <relais> zugeordnet

AnaT                            Test auf Ana-Aktivitt (nur U1615).
                                Stack: - >>> {0|1}
                                1:Ana aktiv, 0:nicht. Keine Ausgabe.

AnaMODE <kanal> [= <mode>]      <mode>  EGES        PMOM        ANA
                                  0  :  *           *           -
                                  1  :  *           *           ana
                                  2  :  eges(ana)   ana         ana
                                  3  :  eges(count) pmom(count) ana/count
                                  4  :  -----------LON--------- ana
                                  5  :  *           *           ana
                                  6  :  -----------LON--------- ana
                                 7+8 :  *           *           ana
                                        ( * : unberhrte Basisfunktion )

______________________________________________________________________________

AUFZ    : gibt Liste der mit <aufz> angegebenen Kanalnummern-Auflistung aus
========
Aufruf  : AUFZ <aufz>
Ausgabe : ja
Ext.    : + - # %
Stack   : - >>> <anzahl_der_elemente>

- Bereich von <aufz> 1..64 oder 0..63
- Beispiele fr <aufz> s. PARAMETER


AUFZ@   : legt Aufzhlungs-Zahlen auf den Stack
========  (ein Bit pro Kanal --> 2*32 Bit)
Aufruf  : AUFZ@ <aufz>
Ausgabe : nein
Ext.    : @
Stack   : - >>> <aufzZahl_33_64> <aufzZahl_01_32>

- Befehle, die eine Aufzhlung akzeptieren, knnen per spezieller Stack-
  Referenz ".." die beiden Stackwerte <aufzZahl_33_64> und <aufzZahl_01_32>
  vom Stack holen und auswerten.
  Beispiel:     AUFZ@ 1..4, EGES ..
- das 1. Bit (LSB) entspricht Kanal 1, das 32. Bit entspricht Kanal 32 in
  <aufzZahl_01_32>, Bits 33-64 sind in <aufzZahl_33_64>.
- U1600/10/15 kennen nur Aufzhlungen mit 32 Bits (0..31 oder 1..32),
  es wird nur ein Element ber den Stack ausgetauscht. Die genaue Stack-
  Belegung entnehmen Sie bitte nachfolgender Tabelle. Es spielt keine Rolle,
  welcher Stationstyp angesprochen wird, sondern ber welchen Stationstyp
  der direkte RS232-Zugang erfolgt.
  Befehl:    Stack U1600/10/15:         Stack U1601/2/3/...:
  -----------------------------------------------------------------------------
  AUFZ@    : - >>> <aufzZahl_01_32>     - >>> <aufzZahl_33_64> <aufzZahl_01_32>
  EGES ..  : <aufzZahl_01_32> >>> -     <aufzZahl_33_64> <aufzZahl_01_32> >>> -

- Bereich von <aufzhlung> : 1..64
- Befehle, die Aufzhlungen ab Null erwarten (PLIST, ALIST...), interpretieren
  die <aufzhlungszahl> um einen Kanal verschoben. Die Ext. '@' oder die
  explizite Aufzhlung ab Null erzwingen richtige Bitpositionen:
  AUFZ@@ 2..4, PLIST .. : listet P-Prog. 2..4
  AUFZ@ 2..4, PLIST ..  : listet P-Prog. 1..3
  AUFZ@@ 0..4, PLIST .. : listet P-Prog. 0..4
  AUFZ@ 0..4, PLIST ..  : listet P-Prog. 0..4

______________________________________________________________________________

BUS  BUSL  BUSR : ECS-LAN Status

Ausgabe der Anzahl der Teilnehmer am ECS-LAN:
  Gesamtanzahl, Anzahl BUS-Links  (davon direkte Nachbarn),
                Anzahl BUS-Rechts (...)

Aufruf: BUS
Stack:  -  >>>  <anzahl_Bus_Teilnehmer>
                BUS:  Gesamtanzahl
                BUSL: Anzahl links, oder -1 falls BUS-L-Fehler
                BUSR: Anzahl rechts, oder -1 falls BUS-R-Fehler
ext:    + - . #

Beispiele:
  BUS    :  Busteilnehmer gesamt= 8, BL= 3(1), BR= 4(4)
  BUS.   :  8;3;1;4;4;0;0   [letzten beiden Werte: L-;R-Fehler (1:Fehler)]
  BUS#   :  8
  BUSL#  :  3

______________________________________________________________________________

COMLOCK
COM1LOCK
COM2LOCK :  Sperren der COM-Schnittstelle, keine Zeichen werden mehr ange-
==========  nommen. Die Sperre bleibt fr 255s bestehen, falls sie nicht
            zuvor mit COMOPEN aufgehoben oder erneut aufgefrischt wird.
            Beim Empfang des Zeichens ^X (24d) wird die Sperre aufgehoben.
            Nur lokal ausfhrbar.
COMOPEN
COM1OPEN
COM2OPEN :  Freigeben der COM-Schnittstelle. Nur lokal ausfhrbar.
==========

COMDTR   :  Nur verfgbar bei U1600: kurzzeitiges Deaktivieren der
==========  COM1 DTR-Leitung (0.4s). Deaktivieren der DTR-Leitung bis zu
            20 Sekunden (nur bei U1600):        PAUSE@ <sekunden>
            Nur lokal ausfhrbar.

- Diese Befehle sind fr Spezialaufgaben gedacht (z.B. Callback via Modem).
- "Nur lokal ausfhrbar" bedeutet, dass unabhngig von der Kennungsangabe
  die Befehle nur fr die direkt angeschlossene Station gelten.
- Die COM-Sperre wirkt auf folgende Schnittstelle:
                                ECL-Interpreter luft auf
        Befehle                 COM1    H-Prog. COM2
        -------------------------------------------------
        COMLOCK/COMOPEN         COM1    COM1    COM2
        COM1LOCK/COM1OPEN       COM1    COM1    COM1
        COM2LOCK/COM2OPEN       COM2    COM2    COM2


Einstellen der COM-, LAN-, LON- Schnittstellen:
===============================================
SETCOM1 [= <param> [<dly]]      // serielle COM-1 Schnittstelle
SETCOM2 [= <param> [<dly]]      // serielle COM-2 Schnittstelle
SETCOM3 [= <param> [<dly]]      // COM-3 Erweiterung (soweit verfgbar)
SETLANL [= <param> [<dly]]      // ECS-LAN LINKS
SETLANR [= <param> [<dly]]      // ECS-LAN RECHTS
SETLON  [= <param>]             // LON Netzwerk (soweit verfgbar)
SETCOMS                         // Ausgabe aller Schnittstellen-Einstellungen

Ausgabe :  ja
Ablage  :  Parameter-String
Stack   :  - >>> -
Ext.    :  & + - # % $ ?

- die Einstellmglichkeit per ECL ist erst mit Firmware-Versionen ab dem
  16.05.1999 mglich.
- Die Einstellungen mssen mit grter Vorsicht vorgenommen werden, da ein
  Gerte-Verbund bei falscher Einstellung u.U. irreversibel gestrt werden
  kann. Diese Strungen knnen u.U. nur noch lokal per Bedienpanel beseitigt
  werden.
- Damit ECS-LAN und COM Einstellungen ausgefhrt werden knnen, ohne den
  aktuellen Befehl zu behindern, kann ein Delay <dly> in Sekunden angegeben
  werden (0.3s .. 25.5s, Werte kleiner 0.3 --> 0.3s).
  SETLON arbeitet stets ohne Verzgerung (auch wenn <dly> angegeben wird).
- <param> ist der Parameter-String, der keine Leerzeichen enthalten darf.
  Gro-/Kleinschreibung ist unwichtig.
  Die komplette Parametrierung oder nur ein Teil kann angegeben werden, die
  Angaben in Klammern sind alternativ gltig.

SETCOM1,SETCOM2:  mode/baudrate/parity/handshake
----------------
    mode        : OFF, ECL, ECL+HP, DCF77(DCF)
    baudrate    : 110, 150, 300, 1200, 2400, 4800(4k), 9600(9k), 19200(19k),
                  38400(38k), 57600(57k), 76800(76k), 115200(115k)
    parity      : P-, EVEN(PE), ODD(PO)
    handshake   : XON(XOFF), RTS(CTS)

SETLANL,SETLANR:  mode/baudrate
----------------
    mode        : 2D(2W), 2D+(2W+), 4D(4W)
    baudrate    : 62500(62), 125000(125), 375000 (375)

SETLON:           mode
-------
    mode        : OPEN(O)(-), RA50(RT50)(50), RA100(RT100)(100)

Beispiele:
* Setzen von COM1 auf Standard-Vorgaben (ECL/9600/P-/XON):
        SETCOM1 = DEFAULT
* ndern der Baudrate auf 115200 Baud:
        SETCOM1 = 115k
* ndern der Parity und des Handshakes (PE/RTS)
        SETCOM1 = PE/RTS
* ECS-LAN: ndern der Baudrate einer Line-to-Line Verbindung (hier seien die
  Stationen D:(LAN/R) mit E:(LAN/L) verbunden (2-Draht oder 4-Draht).
  Die Verbindung arbeitet einwandfrei mit 62k5 Baud, die Baudrate soll nun
  auf 125k Baud erhht werden. Sie haben Zugriff auf beide Stationen ber das
  ECS-LAN (via D:LAN/L); damit die Verbindung zu E: nicht abreit, wird die
  Einstellung um 2 Sekunden verzgert.
        D:SETLANR = 125k 2, E:SETLANL = 125k 2
  Nach Ausfhren dieser Zeile werden die Einstellungen nach 2s gltig, die
  Befehle konnten in dieser Zeit garantiert beide Stationen erreichen und
  besttigt werden. Testen Sie nun die Netz-Performance mit SYSTEST.

______________________________________________________________________________

DCF77 Funkuhr-Synchronisation
=============================
Die DCF77 Funkuhr wird entsprechend den gertespezifischen Anschlumglich-
keiten an COM1 oder COM2 angeschlossen. Diese COM-Schnittstelle mu nun per
RS232-Men auf MODE=DCF77 eingestellt werden. Es knnen nicht beide COM-
Schnittstellen gleichzeitig auf den DCF77-Mode eingestellt werden, daher
kann DCF77 genau dann nicht gewhlt werden, wenn die andere COM-Schnittstelle
auf DCF77-Mode eingestellt ist.

Pro Minute wird ein DCF77-Telegramm empfangen. Anhand der Anzahl der Bits und
der richtigen Parittsbits kann ein Telegramm weitgehend verifiziert werden
(--> <DCF_rohe_Zeit>). Wenn zwei gleiche Telegramme empfangen werden, wird
diese Zeitinformation als korrekter Empfang gewertet (--> <DCF_gute_Zeit>).

Die Stationszeit wird bei korrektem Empfang automatisch synchronisiert, die
erzielte Genauigkeit betrgt +/- 0.5 Sekunden. Damit ein "Zeit-Jitter",
bedingt durch die Synchronisation per DCF oder ZEIT-Befehl, nicht zu einem
Fehlverhalten bei Intervallgrenzen oder Zeitvergleichen fhren kann, ist ein
Verfahren implementiert, das Abweichungen <= +/-3s strungsfrei verarbeitet.
Die <Zeit_vom_letzten_Update> wird nichtflchtig gespeichert, wenn die
Systemzeit angepat werden mu, nicht jedoch Gleichlauf.

Kompatibilittshinweis: bei U1600/10/15 wird stets um stets um xhxx:05
synchronisiert, Abweichungen <= 1 Sekunde werden nur stndlich korrigiert,
"Zeit-Jitter" wird nicht ausgeglichen.

Zur Sommerzeit/Winterzeitumstellung verwenden Sie bitte trotz Funkuhr ein
H-Programm mit dem Befehl SOWI (siehe SOWI), da ein permanenter Empfang nicht
gewhrleistet werden kann und somit ein eigenstndiges Umstellen notwendig ist.

Zeitsynchronisation mehrerer Stationen:
(luft auf der Station mit DCF77 Uhr, Gesamt-Zeitabweichung: +/- 1 Sekunde)
        H 17 = 'IF 0h00:15, ALL-, TIME// = xhx:x x.x.x'


Befehle zur DCF77 Statistik (stackorientiert, keine Ausgabe):
-------------------------------------------------------------
DCF             - >>> <Zeit_vom_letzten_Update> <DCF_rohe_Zeit> <DCFsekunden>
DCF_            - >>> <Zeit_vom_letzten_Update> <DCF_gute_Zeit> <DCFsekunden>
DCF*            - >>> <0000FFJJ> <MMTThhmm> <par> <bit> <DCFsekunden>
DCF@            - >>> <DCF_Takt_luft>
DCF@@           - >>> <DCF_Empfang_ok_in_den_letzten_4_Minuten>

- <DCF_Takt_luft> : 1 Sek. Abwrtzhler, wird bei Bit-Empfang auf 70 gesetzt.
- <DCF_Empfang_ok_in_den_letzten_4_Minuten> : 1 Sek. Abwrtszhler, wird bei
  empfangenem korrektem Minutentelegramm auf 240 gesetzt.
- Abfrage des letzten Updates (siehe auch DCFSTATUS):
        DCF,dr 2,time// .


DCFSTATUS (DCFSTAT)  :  Ausgabe der aktuellen DCF77-Zeit sowie Zeitpunkt der
---------------------   letzten Anpassung der Systemzeit.      (U1600: b.v.)
Aufruf  :  DCFSTATUS
Ausgabe :  ja
Stack   :  - >>> <DCF_kein_Empfang_seit_n_Minuten>
Ext.    :  + $ ## &

- Liegt der Empfang der letzten gltigen Zeitinformation mehr als 4 Minuten
  zurck, so wird "??:??:nn" angezeigt. Wird die Zeitanzeige in Klammern
  dargestellt, so ist die letzte gltige Zeitinformation lter als 1 Minute.
  Wenn die Sekunden in Klammern gezeigt werden, so wurde ein Parity-Fehler
  erkannt. Die Anzahl der Minuten seit dem letzten korrekt empfangenen
  Telegramm werden in eckigen Klammern angegeben (z.B. "[3m]"), sofern die
  Anzahl grer Null ist (bei U1600/10/15 fehlt diese Angabe).
- Der Zeitpunkt der letzten Anpassung wird solange gespeichert, bis
  entweder eine Zeitanpassung wegen Abweichung erfolgt oder die Systemzeit
  anderweitig verndert wird. Im letzteren Fall wird der Zeitpunkt auf Null
  gesetzt, dargestellt wird "--:--:--".
- <DCF_kein_Empfang_seit_n_Minuten> : Anzahl der Minuten seit dem letzten
  korrekt empfangenen Telegramm. Wird bei Reset/Hilfsenergieunterbrechung
  (oder wenn DCF77-MODE nicht ausgewhlt ist) auf Null gesetzt. U1600/10/15
  lieferen stets Null.
  <DCF_kein_Empfang_seit_n_Minuten> kann gut zur berprfung des DCF77-
  Empfangs per H-Programm verwendet werden. Beispiel:
        H 20 = 'dcfstat-,300,>,rel 2=.'
  Relais 2 wird eingeschaltet, wenn 5 Stunden (=300 Minuten) lang kein
  korrektes DCF77-Telegramm empfangen wurde.

______________________________________________________________________________

DELIMITER (DELI) (DL) : Einstellen der Delimiter fr den Rest der Befehlszeile

Aufruf  :       DELI  [[<feldtrenner>][__<recordtrenner>]]
Ausgabe :       nein
Stack   :       - >>> -
Ext.    :       * + . #

- DELI ohne Parameter setzt auf Defaultwerte:
  <feldtrenner> = ';'   <recordtrenner> = "\r\n"   [<CR><LF>]
- Beide Delimiter knnen bis zu 8 ASCII-Zeichen enthalten.
- Auch leere Delimiter sind mglich: DELI \000 \000             (U1600: b.v.)
- Zur Wahrung einer einheitlichen Programmumgebung gelten die neuen Delimiter
  nur fr den Rest der Befehlszeile, danach gelten wieder die Defaultwerte.
- Ext * kehrt Parameter-Reihenfolge um: DELI* <recordtrenner>[__<feldtrenner>]
- Wird nur ein Parameter genannt, bleibt der andere unverndert.
- Bei Ext. '.' gilt: <recordtrenner> = <feldtrenner>            (U1600: b.v.)
- Bei Ext. '#' gilt: <feldtrenner> = <recordtrenner>            (ab 02/2002 )
- Ext. '+' unterdrckt den nchsten <recordtrenner> der Ausgabe (U1600: b.v.)
  Bitte beachten Sie, dass Umleitungen in das Clipboard ohne Ausgabe
  (mit Ext. '--') den ersten <recordtrenner> meistens enthalten, wodurch die
  gewnschte Unterdrckung in der Ausgabe nicht (mehr) stattfinden kann.
  Abhilfe: Umleitung mit Anhngen (Ext. '--+')

Beispiele:
* Statt der normalen ';' Trenner soll fr die dBASE-Anweisung
  APPEND FROM ... DELIMITED mit ',' getrennt werden. Strings sollen mit ""
  eingefat werden (Ext. '$'):
        DELI ","; EGES.$ 1      -->     "EGes",1,"Kanal-1",127.34,"kWh"

* Mehrere verschiedene Werte sollen mit Semikolon getrennt ausgegeben werden.
  Hierzu wird <recordtrenner> = <feldtrenner> gesetzt und das erste Semikolon
  unterdrckt (Merke: Ausgaben beginnen stets mit <recordtrenner>):
  !!,DELI.+, KANAL# 1,ZKONST# 1+3,URAT# 1,! Test  -->  Kanal-1;100;640;1;Test


CHAIN   : Verketten der Ausgaben von Befehlen mit der Doppel-Ext. "##",
========  Aneinanderfgen von Clipboard-Eintrgen.

Aufruf  :       CHAIN           Beginn der Verkettung
                CHAIN-          Ende der Verkettung
Ausgabe :       nein
Stack   :       - >>> -
Ext.    :       $

- CHAIN ist verfgbar in Firmware-Versionen ab dem 16.05.1999.
- So einfach die Ausgabe eines kanal-orientierten Befehls mit der Ext. "##"
  von "mehrzeilig" (Werte mit <CR><LF> getrennt) in einzeilig (Werte mit
  Semikolon getrennt) umschaltbar ist, so aufwendig ist die gleiche Ausgabe-
  Form, wenn die Daten von mehreren Befehlen kommen (siehe Beispiel bei DELI).
  Mit CHAIN wird der Ausgabefunktion mitgeteilt, dass der Ausgabe-Kopf jedes
  Befehls mit Doppel-Ext. (z.B. "##", ".." oder "%%") nur beim ersten Befehl
  nach CHAIN der <recordtrenner> ist, ansonsten der <feldtrenner>.
  Die Ext.'+' wirkt nur beim ersten Befehl nach CHAIN.
  Beispiel:
  CHAIN,KANAL## 1,ZKONST## 1+3,URAT## 1,!## Test  -->  Kanal-1;100;640;1;Test

- Nach CHAIN werden alle mit Ext. '--' erzeugten Clipboard-Ausgaben aneinander
  gehngt (Gesamtlnge 128 Zeichen). Ohne CHAIN wird die Clipboard-Ausgabe pro
  Befehl neu initialisiert.
  Die Clipboard-Referenz '$' bezieht sich auf das Clipboard vor Aufruf von
  CHAIN. Bevor also das verkettete Clipboard ausgegeben werden kann, mu mit
  CHAIN- die Verkettung beendet werden.
  Beispiel:
        !-- "eins",!-- "zwei",!$                        -->     zwei
        CHAIN,!-- "eins",!-- "zwei",CHAIN-,!$           -->     eins
                                                                zwei
- Die Ext. '+' funktioniert, wie oben beschrieben, nur beim ersten Befehl
  nach CHAIN. Um lediglich Strings zusammen zu fhren, wird CHAIN$ verwendet.
  CHAIN$ modifiziert die Ausgabekopfverarbeitung nicht.
        CHAIN,!-- "eins",!--+ "zwei",CHAIN-,!$          -->     eins
                                                                zwei
        CHAIN$,!-- "eins",!--+ "zwei",CHAIN-,!$         -->     einszwei

______________________________________________________________________________

DIR DIRN DIRS : Verzeichnis aller ECS-LAN Teilnehmer

DIR  [<auswahl>]   : nur KENNUNG aller Teilnehmer (A:)
DIRN [<auswahl>]   : KENNUNG und STATIONSNAME aller Teilnehmer (A:Werk1)
DIRN_              : KENNUNG und STATIONSNAME der angewhlten Station

Ausgabe : ja
Stack   : - >>> -
Ext.    : + - # . %

- DIR mit ECS-LAN Info: siehe DIRS
- Die Liste der Teilnehmer lt sich durch Angabe einer Auswahl einschrnken
  <auswahl> :                                                   (U1600 b.v.)
  *  : alle Stationen (kann weggelassen werden)
  #  : Alle meine Brder (gleiche Gerte, aktueller Adresskontext entscheidend)
  ## : Meine ganze Familie (REGSys oder ECSys, akt. Adresskontext entscheidend)
ECSys:
  U  : alle U16xx Stationen (auch AB oder BA mglich)
  A  : alle U1600/10/15 Stationen
  B  : U1601 Stationen
REGSys:
  RP : REG-D und PAN-D (auch PR mglich)
  R  : REG-D
  P  : PAN-D
  M  : MMU-D
  Q  : PQI-D
  S  : REG-DP
  O  : EOR-D
  T  : REG-TM

- Hinweis: <auswahl> {# ## M Q S O T} erst ab 12/2001 (RS232-Gert ausreichend)
  verfgbar.

--------------------
DIRS  [<auswahl>]  : wie DIR, aber mit Info je Kennung:
                     L= Links, R= Rechts, + = direkter Nachbar, * = "Ich"

Ausgabe : ja
Stack   : - >>> <anzahl_BUS_Teilnehmer>
Ext.    : + - # . %                                 (Ext. '%' bei U1600: n.v)

______________________________________________________________________________

DISPLAY (DD) : Holen der LCD-Anzeige

Aufruf  : DISPLAY [<tastenkrzel...>]     <tastenkrzel..> : siehe TASTE
Ausgabe : U1600: 3 Zeilen: 1.+2. LCD-Zeile + 1 Zeile mit Status der 8 LEDs
                 [LAN/L LAN/R R1 R2 R3 R4 STATUS STAT24V]
          U1601: 17 Zeilen: 1.-16. LCD-Zeile + 1 Zeile mit Status der 4 LEDs
                 und ab V2.42 Status der 6 Relais
                 [STATUS LAN/L LAN/R LON R1 R2 R3 R4 R5 R6]
          REG-D: 17 Zeilen: 1.-16. LCD-Zeile + 1 Zeile mit Status der 10 LEDs
                 [STATUS <U >U >I LED1 LED2 LED3 LED4 AUTO HAND]
          PAN-D: 1 Zeile: 1 Zeile mit Status der 18 LEDs
                 [BETRIEB STOERUNG <U1 >U2 <<U3 >>U4 LAUFLAMPE PHASENFALL LED1
                  LED2 LED3 LED4 STOERSTUFE STOERREG AUSLOES NOTAUS LED5 LED6]
Stack   : - >>> -
Ext.    : + - # |

- Der Cursor im Display (nur U1600) wird durch Vorstellen eines '&' kodiert.
- Codierung in der LED/RELAIS-Informationszeile:
  '-' : AUS,  '*' : EIN,  andere NICHT-STEUERZEICHEN : EIN (reserviert)
- Ext. #  : Ausgabe ohne ""-Anfhrungszeichen
- Ext. |  : zeigt nur die LED-Zeile     (U1600: b.v.)
- Ext. || : zeigt nur die Text-Zeilen   (U1600: b.v.)

______________________________________________________________________________

DUP (DU)  DROP (DR)  SWAP (SW)  PICK : Stack-Manipulationen

DUP     : n1 n2    >>> n1 n2 n2
DROP    : n1 n2 n3 >>> n1 n2
SWAP    : n1 n2    >>> n2 n1

DUP  <n>: fhrt DUP n-mal durch
DROP <n>: fhrt DROP n-mal durch
DROP *  : lscht alle Elemente vom Stack (ab 12/2001)

PICK <i>: kopiert i-tes Stackelement an 1. Position. 'PICK 1' == 'DUP'

STKS (STACKS)   : Stackstruktur-Ausgabe (ab 12/2001)
================= Elemente vom Stack als Struktur ausgeben (HEX- oder Binr-
                  Ausgabe) und vom Stack entfernen (nicht bei Ext.'|').
STKS            : entspricht STKS *
STKS *          : nur die verwendeten Elemente
STKS **         : alle 63 Stackelemente
STKS <n>        : <n> Elemente (0, 1..63)
Extensions:
        |       : Elemente werden nicht vom Stack entfernt
        .       : statt HEX-Ausgabe wird Binr-Ausgabe gewhlt
        *       : INTEL statt MOT
        $       : Ausgabe der Checksum (4-stellige HEX-Zahl) am Ende der Datei
        #  ##   : Element-Einzelausgabe getrennt mit CR-LF ('#') oder
                 ';' ("##"), keine Checksum mglich.
        %  %%   : Element-Einzelausgabe wie '#' oder "##" mit Ausgabe des
                  %-Paramterstrings vor Element

______________________________________________________________________________

dVSUM dVIRT  :  Beschreibungs-Funktionen zur Bildung von virtuellen Kanlen
                in Hintergrund-Programmen mit differenzieller Summenbildung
                (lose Kopplung).

dVSUM   : summiert Kanle der Aufzhlung in Zwischenregistern
Aufruf  : dVSUM <basis_aufzhlung> [<faktor>]
Ausgabe : nein
Stack   : - >>> -

dVIRT   : weist die Zwischenregister-Differenz-Summen einem oder mehreren
          Ziel-Kanlen zu.
Aufruf  : dVIRT <ziel_aufzhlung> [<faktor>] =
Ausgabe : nein
Stack   : - >>> -
Ext.    : + * |

dVIRT+ ...   :  die berechnete Energie wird der vom Zielkanal gemessenen
                Energie hinzu addiert. Ohne Ext. '+' hat die gemessene
                Energie keine Auswirkung.
dVIRT* ...   :  normalerweise werden nach DVIRT die Zwischenregister ge-
                lscht. Mit der Ext. '*' bleiben sie jedoch unberhrt.
dVIRT| ...   :  nur positive Quanten und Leistungen werden beachtet (s.u.).
dVIRT|| ...  :  nur negative Quanten und Leistungen werden beachtet (s.u.).

- DVIRT kann fr alle Kanle angewendet werden, jedoch pro Kanal nur ein
  einziges Mal. DVIRT darf nur in H-Programmen ausgefhrt werden und kann
  NICHT mit IF..THEN..ELSE beeinflut werden.
- Bei Angabe eines <faktor>s wird die Teil-Energie/Leistung mit diesem
  multipliziert. Achtung, dieser <faktor> mu statisch sein, darf also nicht
  vom Programmablauf verndert werden.
- Die Momentanleistung PMOM des gebildeten Kanals entspricht der Summe der
  Momentanleistungen der Basiskanle. Wenn die DVIRT-Bildung fr lnger als
  30s unterbrochen wird, so wird PMOM auf Null oder den eff. Mewert gesetzt.
  Krzere Unterbrechung fhren zu KEINEM DATENVERLUST an Energie-Quanten!
- Die Summen im virtuellen Kanal sind vollkommen unabhngig von den Basis-
  kanlen (lose Kopplung). Gebildetet Summen knnen direkt gelscht werden.
- STARTSTOP kann deshalb unabhngig von den Basiskanlen verwendet werden.
- Einmalige Addition eines Energiequants zu einem Kanal: siehe DELTA
- Ext. '|' verfgbar ab ECSys V2.47, sie ist nur bei DVIRT mglich.
  Bei Verwendung dieser Ext. werden nur positive ('|') oder nur negative ("||")
  Quanten und Leistungen beachtet. Einsatzbeispiel: Ein Basiskanal wird auf-
  gespalten in einen Bezugs- und einen Abgabekanal.
  Einschrnkungen: die Funktion arbeitet nur dann erwartungsgem, wenn genau
  ein Summenkanal verwendet wird; eine Verwendung mit mehreren Summenkanlen
  fhrt u.U. zur permanenten Addition/Subtraktion von kleinsten Bilanzunter-
  schieden. In Kombination mit Ext. '+' werden nur die mit DVSUM/DVIRT
  gebildeten Energie-Quanten und Leistungen eingeschrnkt, nicht aber die vom
  Zielkanal direkt gemessene Energie.
- Effizienz: Jeder DVSUM Befehl verwendet ein ECS-LAN-Telegramm, unabhngig
  von der <basis_aufzhlung>. Der DVIRT Befehl jedoch verwendet pro Kanal
  der <ziel_aufzhlung> ein ECS-LAN-Telegramm.

Beispiele:
- Der Kanal 26 von Station D: bildet eine Kostenstelle aus den Kanlen
  1..5+8 der Station B: (bewertet mit 0.7) und dem Kanal 4 der Station C:
  (bewertet mit 0.3):
  H 1 = 'B:DVSUM 1..5+8 0.7, C:VSUM 4 0.3, D:VIRT 26='

- Der Kanal 10 entspricht der Bilanz der Kanle 1..8 und dem Gesamtsummen-
  Kanal 9 (Summe 1..8 abzglich Kanal 9):
  H 2 = 'DVSUM 1..8, DVSUM 9 -1, DVIRT 10='

______________________________________________________________________________

DELTA   :  Einmalige Addition eines Energiequants zu einem Kanal.

Aufruf  :  DELTA <aufzhlung> [<faktor>] = <wert>
Ausgabe :  nein
Stack   :  - >>> -
Ext.    :  |

DELTA| ...   :  nur positive Quanten werden beachtet.
DELTA|| ...  :  nur negative Quanten werden beachtet.

- STARTSTOP ermglicht (STSP==1) oder ignoriert (STSP==0) die Zuweisung.
- Der <wert> kann mit einem optionalen <faktor> bewertet werden (U1600: b.v.).
- Ext. '|' verfgbar ab ECSys V2.47.
- Beispiel fr die Realisierung eines Zeitzhlers: siehe HTD.

______________________________________________________________________________

EEINH PEINH AEINH TEINH : Einheiten der Energie E, Leistung P, Analog-E/A
                          und des Tarifs(max. 4 Zeichen)

Aufruf  :  EEINH <aufzhlung> [=<zeichenkette>]
Ausgabe :  ja
Ablage  :  <einheit>
Stack   :  - >>> -
Ext.    :  + - . # $ %

- Zeichenvorrat siehe KANAL.
- Damit die Analog-Einheit angewendet werden kann, mu ANAUSEL <kan> = 3
  gesetzt werden.
- AEINH bei U1600/10/15 nicht verfgbar, Antwort ist ein Leerstring.

______________________________________________________________________________

EINT PINT : Energie und Leistung im Intervall (Datenliste)

Aufruf: Eint <aufzhlungKanal> [<startindex>] [<wieviele>]    [=<neuerWert>]
Stack : -  >>>  <wert>    (Bei Aufzhlungen:  <wert>=Summe(Einzelwerte))
Ext.  : + - . # / * _ | $ % @

Die Ausgabe erfolgt ab <startindex> in zeitlich aufsteigender Reihenfolge
<startindex> ohne Angabe --> <startindex>=0
<startindex>=='*'        --> <startindex>=zeitlich erster Eintrag

<wieviele> ohne Angabe   --> <wieviele>=1
<wieviele>=='**' : Alle Eintrge ab <startindex>  (mit Eint-0)
<wieviele>=='*'  : Alle Eintrge ab <startindex>  (OHNE Eint-0)
<wieviele> grer <startindex> : "      "   "   "

- Suchen eines bestimmten Index: siehe INDEX
- die Datenliste mu fr eine Kanalauswahl formatiert (#-Aufzhlung) werden.
  Formatieren und Formatinfo-Abfrage erfolgen mit dem Befehl FORMAT.
- Die Eintrge in der Datenliste (auer dem aktuellen Wert) sind zu Lasten
  der Genauigkeit komprimiert (siehe FORMAT).
- zur schnellen Datenbertragung eignet sich ausschlielich: EINT##

Leistungsoptimierung:
- PINT@ <aufzhlung> gibt den gemittelten Leistungswert des gerade laufenden
  Intervalls mit hherer Genauigkeit aus (innerhalb der ersten Sekunden),
  da der Zeitbezug auch Millisekundenanteile bercksichtigt. Die normale
  Leistungsberechnung (PINT <aufzhlung>) arbeitet stets mit ganzen Sekunden.
  Fr eine Leistungsoptimierung ist es wichtig, dass am Anfang des Intervalls
  die Daten sich relativ schnell einschwingen und keine groen berschwinger
  aufweisen. Bei einer solchen Anwendung sollten Sie PINT@ ... verwenden.
  Auf U1600/10/15-Stationen darf PINT@ erst ab Version 1.63m (auch bei
  Zugriff ber das ECS-LAN) verwendet werden.

______________________________________________________________________________

Eges:           Gesamt-Energie
EgesT1:         Gesamt-Energie Tarif 1
KOSTT1:         Kosten Tarif 1
EgesT2:         Gesamt-Energie Tarif 2
KOSTT2:         Kosten Tarif 2
EgesT1T2:       Gesamt-Energie Summe Tarif 1+2
KOSTT1T2:       Kosten Tarif 1+2
PMOM:           momentane Leistung (P)ower

Aufruf  : EGES <aufzhlung> [=<neuerWert>]
Ausgabe : ja
Stack   : -  >>>  <wert>    (Bei Aufzhlungen ist <wert>=Summe(Einzelwerte))
Ext.    : + - . # / * _ | $ %

- Statt der Energie kann mit der ext: * auch die (berechnete) Impulsanzahl
  ausgegeben werden. Beipiel:  EGES* 1
  Zur Berechnung wird Zkonst, Urat und Irat des entsprechenden Kanals ver-
  wendet (auch bei virt. Kanlen).
- Ext. '|' gibt nur <wert> und <einheit> aus:  Eges| 1   --->   123.34 kWh
- <neuerWert>==0  -->  Zeitinfo wird gelscht, d.h. die VON-Zeit und die
  BIS-Zeit werden auf die aktuelle Zeit gesetzt.

Messung der Momentanleistung PMOM:
==================================
- wenn der Eingang als Zhler parametriert ist, so wird die Momentan-Leistung
  aus dem Abstand der letzten beiden Impulse ermittelt. Pulsabstnde von
  >65s bewirken ein Lschen von Pmom. Wenn die Zeit seit dem letzten Impuls
  grer als der letzte Pulsabstand ist, so wird diese als Bezug zur Pmom-
  Messung verwendet.
  Der PFAKTOR geht in die Berechnung der Momentanleistung mit ein.
- Die von PMOM mit Ext. '/' oder '//' gelieferte Zeitinformation ist wie folgt
  zu interpretieren:
  PMOM// : VON-Zeit :   Zeitpunkt der letzten Energie-nderung, entspricht
                        Zeitpunkt des letzten Zhlimpulses.
  PMOM/  : BIS-Zeit :   aktuelle Zeit.
- Die VON-Zeitinformation (Auflsung 1s) wird auf Basis von LASTUPD (s.u.)
  gebildet. Wird eine Auflsung <1s bentigt, mu LASTUPD angewendet werden.
  Zeitspannen grer 20 Tage liefern VON-ZEIT=0 (01.01.1990 00:00:00).
- U1600/10/15: PMOM liefert keine brauchbare Zeitinfo (VON=0, BIS=0).

LASTUPD (LUPD)  : Zeitdauer [s] seit letztem Kanal-Update        (U1600: n.v.)
==============
Aufruf  : LASTUPD <aufzhlung>
Ausgabe : ja
Stack   : -  >>>  <wert>    (Bei Aufzhlungen ist <wert>=Summe(Einzelwerte))
Ext.    : ! + - . # %

- Mit LASTUPD kann die Zeitspanne in Sekunden (Auflsung 1ms) vom letzten
  Kanal-Update (Energie nderte sich) bis jetzt ermittelt werden.
- Die maximale Zeitspanne betrgt 20 Tage. Fr lngere (beliebig lange) Zeit-
  spannen gilt: <wert> = 1728000 s == 20 Tage.
- Bei Kanlen, die ber keine Zeitspannenberechnung verfgen, ist <wert> = 0.

______________________________________________________________________________

                im Intervall    pro Tag         pro Monat       pro Jahr
Energien:       (siehe Eint)    ETag            EMon            EJahr
mittlere Leist: (siehe Pint)    PTag            PMon            PJahr

Energie-Maxima: Emax (10 St.)   EmTag           EmMon           EmJahr
mittlere Leist: Pmax (10 St.)   PmTag           PmMon           PmJahr

Listenlnge:    variabel        10+lfd. Tag     12+lfd. Monat   2+lfd. Jahr

Aufruf  :  ETag <aufzhlungKanal> [<aufzhlungIndex>]  [=<neuerWert>]
Ausgabe :  ja
Stack   :  -  >>>  <wert>    (Bei Aufzhlungen ist <wert>=Summe(einzelwerte))
Ext.    :  + - . # / * _ | $ %

- <aufzhlungIndex>=0 oder keine Angabe: laufender Zyklus
- <neuerWert>=0         -->  Zeitinfo wird zustzlich gelscht (VON=0,BIS=0)
- EMAX <..> <index>=0   -->  Lschen ab <index> bis <maxIndex> (nur EMAX)
- Variabler Tages-/Monats-/Jahresanfang: TAGBEG  MONBEG

______________________________________________________________________________

ECL-Interpreter Fehler
======================
ERR     : Ausgabe des Fehlerzustandes der Hintergrundprogramme
---
Aufruf  : ERR
Ausgabe : ja
Stack   : - >>> -
Ext.    : _     (unterdrckt die "Keine Fehler in .." Meldung)

LERR    : Last Error, Fehler-Nummer von letzter Ausfhrung des aktuellen
----      H-Programms.
Aufruf  : LERR
Ausgabe : nein
Stack   : - >>> <n>      <n> : Fehler-Nummer (s.u.) oder 0 (kein Fehler)

LBERR   : Last Bus Error; wie LERR, es werden jedoch nur ECS-LAN relevante
-----     Fehler betrachtet (sonst 0).

ERRNR   : Ausgabe der Beschreibung einer Error-Nummer
-----
Aufruf  : ERRNR <aufzhlung>              ERRNR
Ausgabe : ja
Stack   : -  >>>  -                       <ErrNr>  >>>  -
Ablage  : Fehlerbeschreibung(ErrNr)
Ext.    : + - . #  $ %

- ERRLIST (U1600: b.v.) entspricht ERRNR


Stations-Fehler
===============
ERRSTAT         : Abfrage des aktuellen Stations-Fehlerzustandes (U1600: b.v.)
-------
Aufruf  : ERRSTAT [<fehler_maske_aufz>]
Aufruf  : ERRSTAT@ [<fehler_maske>]
Ausgabe : ja
Stack   : - >>> <fehler_word>
Ext.    : _     (unterdrckt die "Keine Fehler in .." Meldung)

- Angabe der zu betrachtenden Fehler per Aufzhlung: <fehler_maske_aufz>,
  32-Bit Zahlenangabe (LSB gesetzt: Fehler 1 betrachten...): <fehler_maske>
- Keine Angabe von [<fehler_maske_aufz>] oder [<fehler_maske>] : ALLE Fehler
- Bei U1600/10/15 werden nur folgende Fehler erkannt:
  8:Interner Batt.-Fehler,11:Uv Ausfall,21:LAN/L Fehler,22:LAN/R Fehler

ERRSTATLIST     : Liste aller mglichen Stations-Fehler         (U1600: b.v.)
-----------
Aufruf  : ERRSTATLIST <fehler_nr_aufz>          ERRSTATLIST
Ausgabe : ja
Stack   : -  >>>  -                             <fehler_nr>  >>>  -
Ablage  : Fehlerbeschreibung(fehler_nr)
Ext.    : + - . #  $ %

Kanal-Fehler
============
ERRKAN          : Abfrage des aktuellen Kanal-Fehlerzustandes   (U1600: b.v.)
------
Aufruf  : ERRKAN <kanal_aufz> [<fehler_maske_aufz>]
Aufruf  : ERRKAN@ <kanal_aufz> [<fehler_maske>]
Ausgabe : ja
Stack   : - >>> <fehler_word>   (geodert aus allen <fehler_word>s)
Ext.    : _     (unterdrckt die "Keine Fehler in .." Meldung)
          *     (Fehlerangaben fr alle Kanle zusammen, nicht aufgetrennt)

- Angabe der zu betrachtenden Fehler per Aufzhlung: <fehler_maske_aufz>,
  32-Bit Zahlenangabe (LSB gesetzt: Fehler 1 betrachten...): <fehler_maske>
- Keine Angabe von [<fehler_maske_aufz>] oder [<fehler_maske>] : ALLE Fehler
- Mit "ALL, ERRKAN&_ *" werden alle Kanalfehler systemweit aufgelistet.
  Es wird pro Kanal ein Telegramm bentigt, bei m Stationen und 64 einge-
  schalteten Kanlen sind das also m*64 Telegramme.
- Zur deutlich schnelleren Abfrage aller Kanalfehler kann die ab V2.45
  verfgbare gertespezifische Aufzhlung "*ERR" verwendet werden:
        ALL, ERRKAN&_ *err
  Alle U1601/2/3 Stationen im Netz bentigen V2.45 oder grer, sonst liefert
  "*ERR" fr ltere Gerte eine leere Liste.
- ERRKAN* (Ext.'*') bentigt nur ein Telegramm pro Station, um alle Kanalfehler
  zur gegebenen Fehlermaske zu zeigen. Eine Kanalzuordnung ist hier aber nicht
  mglich (Kanalinfo = 0).
- U1600/10/15 liefern stets "keine Fehler".

ERRKANLIST      : Liste aller mglichen Kanal-Fehler            (U1600: b.v.)
----------
Aufruf  : ERRKANLIST <kanal_aufz> <fehler_nr_aufz>
Stack   : -  >>>  -
Aufruf  : ERRKANLIST <kanal_aufz>
Stack   : <fehler_nr>  >>>  -

Ausgabe : ja
Ablage  : Fehlerbeschreibung(fehler_nr)
Ext.    : + - . #  $ %

______________________________________________________________________________

EXIT    : vorzeitiges Beenden des laufenden Programmes.

Aufruf: EXIT


RETURN  : vorzeitiges Beenden nur des laufenden Unterprogrammes.
RET     : Kurzform von RETURN

Aufruf: RETURN

______________________________________________________________________________

Fixpunkt-Einstellung:  FIX  FIXE

               Stack:
FIX     :     n  >>>  -   Festkomma-Darstellung, n=Anzahl der Nachkommastellen
FIXE    :     n  >>>  -   Exponential-Darstellung, n=Anzahl der Nachkommast.
                          (U1600: b.v.)
- FIX oder FIXE gelten fr den Rest der Zeile.
- FIX n mit n >= 7 schaltet auf Fliekomma-Darstellung mit maximal n Nach-
  kommastellen um. Default: n=7. (U1600: Fliekomma ab n>=9, Default: n=9)
- FIX akzeptiert auch negative Argumente: die Zahl wird auf den Betrag der
  angegebenen Stellenanzahl gerundet und statt in Festkomma- in Fliekomma-
  darstellung angezeigt (U1600: b.v.).
- FIX / FIXE erlauben die Angabe eines Parameters (Stack bleibt unverndert):
  FIX <n>   ==   <n> , FIX
- Die Exponential-Darstellung mit FIXE hat stets feste Breite (abhngig von
  der Anzahl der Nachkommastellen), mit der Ext.'+' wird auch das Vorzeichen
  immer mit + oder - angegeben.
Beispiele fr FIX:      12.345, FIX 0, !   -->  12
                        12.345, 2, FIX, !  -->  12.35
                        12.345, FIX 5, !   -->  12.34500
                        12.345, 9, FIX, !  -->  12.345
Beispiele fr FIXE:     12.345, FIXE 2, !  -->  1.23E+01
                        12.345, FIXE+ 3, ! -->  +1.235E+01
                        -12.345, FIXE 3, ! -->  -1.235E+01

______________________________________________________________________________

FORI I NEXTI (NI)  :  Programm-Schleifen mit Zhlvariable I
FORJ J NEXTJ (NJ)  :  Programm-Schleifen mit Zhlvariable J
FORK K NEXTK (NK)  :  Programm-Schleifen mit Zhlvariable K  (U1600: b.v.)

Jedes Unterprogramm hat seinen eigenen Satz FORI/FORJ.

Aufruf  : FORI                  FORI <aufzhlung>       I          NEXTI
Ausgabe : nein                  nein                    nein       nein
Stack   : <von> <bis> >>> -     - >>> -                 - >>> I    - >>> -

Hinweise:
- Die Schleife wird mindestens einmal ausgefhrt. Am Schleifenende (NEXTI
  oder Zeilenende) wird I um 1 hochgezhlt oder auf das nchste Aufzhlungs-
  element gesetzt. Wenn kein Element mehr in der Aufzhlung enthalten ist
  oder wenn gilt: I > <bis>, so wird die Schleife nicht mehr ausgefhrt.
- Die Zhlvariablen sind stets verfgbar und knnen auch auf einen be-
  stimmten Wert gesetzt werden (zB: I = 15), jedoch kann mit einer Zu-
  weisung von I eine "FORI <aufzhlung>" Schleife NICHT beeinflut werden.
- Jedes Unterprogramm hat seinen eigenen FORI / FORJ / FORK Satz.
- Folgen nach NEXTI keine Befehle mehr, kann NEXTI weggelassen werden.
- <aufzhlung> kann den Bereich 0..63 oder 1..64 umfassen.
- FORI*  :  Umdrehen der Abarbeitungs-Reihenfolge

Beispiel:       ! Test:, 2,5, FORI, i, !+ " " ., nexti
  oder          ! Test:, FORI 2..5, i, !+ " " .
  oder          ! Test:, FORI 2..5, i, !+ " %ai"
Ausgabe:        Test: 2 3 4 5

Umkehrung:      ! Test:, FORI* 2..5, i, !+ " %ai"
Ausgabe:        Test: 5 4 3 2

______________________________________________________________________________

FORMAT  :  Formatieren der Datenliste (Abruf der Daten mit EINT)

- Die Formatierung teilt den Datenspeicher fr eine bestimmte Kanalanzahl
  von Intervallmedaten ein, die gesamte Speichertiefe hngt jedoch
  dynamisch mit der Lnge des Synchron-Intervalls ab.
  Ist der Speicher voll, so wird rotiert: zu Gunsten eines neuen Eintrags
  wird der lteste Eintrag gelscht.
- Eine Neuformatierung (mit Lschen) der Datenliste erfolgt nur, wenn der
  FORMAT-Anweisung eine <aufzhlung> zugewiesen wird. Ohne Zuweisung gibt
  FORMAT die aktuelle Formatierung aus, auf den Stack kommt die Anzahl der
  speicherbaren Kanle.
- Jede beliebige Aufzhlung (auch mit virtuellen Kanlen) ist mglich
- Die Eintrge in der Datenliste (auer dem aktuellen Wert) sind zu Lasten
  der Genauigkeit in einem 2-Byte-Wert komprimiert.
  Ab ECSys V1.60 sind verschiedene Kodierungen des Datenbereichs mglich,
  um den Arbeitsbereich optimal anzupassen (siehe unten).
  Achtung: ltere ECSys Versionen verstehen die neuen Kodierungen nicht!
- Bei der Auslieferung des Gertes gilt: FORMAT = 1..64 0

Aufruf  :       FORMAT                  FORMAT@
Stack   :       - >>> <kanal_anzahl>    - >>> <kodierung > <kanal_anzahl>
Ausgabe :       Format-Info (nicht bei . und # ##), sowie die Kanalliste
ext.    :       + - . # ## @

Aufruf  :       FORMAT = <aufzhlung>   Formatieren gem Kanalangabe und
Stack   :       - >>> -                 aktueller Kodierung.

Aufruf  :       FORMAT = <aufzhlung> <Kodierung>       Formatieren mit Vor-
Stack   :       - >>> -                                 gabe einer Kodierung

Kodierungen des Datenbereichs: (0: Standard, Auflsung in [] angegeben)
==============================
0 :     0...+/-0.8191[0.0001]...+/-81.91[0.01]....+/-8191[1]...+/-819100[100]
1 :     0....+/-8.191[0.001]....+/-81.91[0.01]...+/-819.1[0.1]...+/-8191[1]
2 :     0....+/-16383[1].......+/-163830[10]
3 :     0......+32767[1].........+327670[10]
4 :     0..+/-99999999 [8 Dezimalstellen, kleinste Stelle: 1E-6]
        Ist die Zahl >99999999, so werden die fhrenden Stellen abgeschnitten.
        1234567890      -->     34567890    Abschneiden der ersten 2 Stellen
        12345678.9      -->     12345679    8. Stelle wird 5/4 gerundet
        1234567.8       -->     1234567.8   keine Einschrnkung
        12.345678       -->     12.345678   keine Einschrnkung
        12.3456789      -->     12.345679   8. Stelle wird 5/4 gerundet
        1.23456789      -->     1.234568    nur 6 Nachkommastellen (s.u.).
Hinweise:
- Die Kodierungen 0,1,2,3 verwenden 2 Byte pro Eintrag, die Kodierung 4 jedoch
  verwendet 4 Byte pro Eintrag, hier wird also die Speicherdauer halbiert.
- Kodierung 4 ist erst ab V2.46 verfgbar, Intervalldaten mit Kodierung 4
  knnen von anderen Stationen mit lterer Firmware nicht ausgelesen werden!
- Bei Kodierung 4 ist die kleinste Auflsung 1E-7, bei der schnellen Ausgabe
  mit Ext.'#' betrgt die Auflsung 1E-6 (die 6. Nachkommastelle wird bei
  Bedarf 5/4 gerundet).

Testen der Kodierung:
---------------------
Aufruf  :       DLVAL <w> [<dlcode>]                            (U1600: b.v.)
Ausgabe :       ja
Stack   :       - >>> <w_komprimiert>

______________________________________________________________________________

H 0 .. H 31  :  HINTERGRUND-Programme ausfhren / programmieren

H 0 .. H 31 werden der Reihe nach im Hintergrund ausgefhrt. Laufzeit-Fehler
knnen mit ERR angezeigt werden. Ausgaben der Hintergrundprogramme werden
immer an COM1 der Station geleitet, auf der das Hintergrundprogramm luft.

Aufruf  :       H <aufzhlung>  [=<zeichenkette>]
Ausgabe :       nein            (ja bei den genannten Ext. auer '-' und '?')
Ablage  :       <programm>      (auer bei Ausfhrung)
Stack   :       - >>> -         (auer bei Ext. '?', s.u.)
Ext.    :       + - . # $ ! % ?

- H ohne <index> == H 0,   H1..H31 == H 1..H 31,   H5! == H! 5
- Bei beliebiger Extension erfolgt keine Programm-Ausfhrung.
- Maximale Verschachtelungstiefe: 10, maximale Zeilenlnge: 128
- H 19 ist das "Druckprogramm", aktivierbar mit dem Bedienpanel. H 19 arbeitet
  nur in dieser Zeit im Hintergrund und ist sonst inaktiv (nur U1600 !).

- H? schiebt Nummer (0..31, -1:Pause) des aktuellen H-Programms auf den Stack.
  Diese Funktion darf nur innerhalb von H-Programmen ausgefhrt werden.
- H?? schiebt auf den Stack: 1= Focus H-Programm, 0= Focus Kommandozeile.
  Damit lt sich feststellen, ob ein Programm als H-Programm ausgefhrt wird.

H-Programme auflisten
=====================
HLIST                   : alle H-Programme auflisten, entspricht:  H! *
HLIST <aufzhlung>      : entspricht:  H! <aufzhlung>
HLIST*                  : alle nicht-leeren H-Programme auflisten (U1600: b.v.)

* Kopieren von H 7 in H 13         :    h- 7,H 13=$     oder      h7-,h13=$
* Kopiert alle H's nach Station B  :    fori 0..31, i,h- ., i,B:h .=$

H-Programme unterbrechen
========================
HBREAK          : Abbruch und 16s Pausieren der Hintergrundprogramme.
HBREAK+         : wie HBREAK, jedoch Dauer der Pause 32s (HBREAK++ : 60s).
HBREAK-         : Pausieren der H-Programme sofort beenden. (U1600: n.v.)

______________________________________________________________________________

Selektives Abfragen von Uhrzeit und Datum, Ergebnis auf den Stack:

HH      :  Stunde       (0..23)
MM      :  Minute       (0..59)
SS      :  Sekunde      (0..59)
TAG     :  Tag          (1..31)
WTAG    :  Wochentag    (1: Montag  .. 7: Sonntag)
MON     :  Monat        (1..12)
JAHR    :  Jahr         (90..99,0..78)
JAHR*   :  Jahr         (1990..1999,2000..2078)

Aufruf  :  HH           : Basis= Systemzeit
Ausgabe :  nein
Stack   :  - >>> <Stundenzahl>
Ext.    : ! _

Aufruf  :  HH .         : Basis= Sek.Zahl vom Stack
Ausgabe :  nein
Stack   :  <sekZahl> >>> <Stundenzahl>
Ext.    : ! _

Bedeutung der Extensions:
- Die Ext. '!' forciert eine Ausgabe:
  Bei HH!, MM!, SS!, TAG!, JAHR! wird die Zahl dargestellt, bei
  WTAG! : Tagesname
  MON!  : Monatsname
- Die Ext. '_' verwendet bei Aufruf ohne Argument die Betriebsdauerzhler-
  Zeit statt der Echtzeit. (U1600: b.v.)
- Ext. '-' oder "--" : Die Zahl oder die Antwort wird in die Zwischenablage
  geschrieben, keine Ausgabe.

Zeitbezug:
- Alle oben aufgefhrten Befehle OHNE Argument verwendet, beziehen sich auf
  die Echtzeit derjenigen Station, auf der der Befehl physikalisch inter-
  pretiert wird (als ob stets die Kennung AA: vorangestellt wre). Siehe
  hierzu KENNUNG und ZEIT. Wollen Sie dennoch die Zeit einer bestimmten
  Station als Bezug verwenden, verfahren Sie wie folgt:
    C5:time-,SS! .      : gibt die Sekunde (0..59) der Station C5: aus

Beispiele:
- Andere Wochentageszahl-Bedeutung (0:Sonntag .. 6:Samstag):
    WTAG,7,MOD, !
- Sekundenanzahl des laufenden Tages:
    TIME-,86400,MOD, !
- SS-Befehl "zu Fu" geschrieben:
    TIME-,86400,MOD,60,MOD, !
- MM-Befehl "zu Fu" geschrieben:
    TIME-,86400,MOD,3600,MOD,60,/,INT, !

______________________________________________________________________________

IF  ELSE  ENDIF (EIF)  :  Programm-Verzweigungsbefehle
Der IF-Befehl nimmt ein Element vom Stack und rundet es (5/4) auf die
nchste Ganzzahl. Ist diese ungleich Null, so wird der Programmteil
zwischen IF und ELSE abgearbeitet. Ist sie gleich Null, gilt der
Programmteil zwischen ELSE und ENDIF.

Aufruf  : IF                            ELSE            ENDIF
Stack   :  <bedingung> >>> -            - >>> -         - >>> -

- Pro Unterprogramm gibt es bis zu 4 Verschachtelungsebenen.
- Folgen nach ELSE oder ENDIF keine Befehle mehr, kann ELSE / ENDIF
  weggelassen werden.
- Soll der Programmteil zwischen IF und ELSE nur einmal beim Auftreten einer
  wahren Bedingung durchgefhrt werden, benutzen Sie IFF (siehe IFF).
- IF mit Zeitvergleich siehe ZEITVERGLEICH.
- EIF ist die Kurzform fr ENDIF

Beispiel fr "Bedingung erfllt":
    1, IF, PRINT "Dieser Teil wird ausgefhrt", ELSE , PRINT "dieser nicht"
Beispiel fr "Bedingung NICHT erfllt":
    0, IF, PRINT 'Nein', ELSE , PRINT "JA", endif; PRINT "Ja/Nein-Fertig"

______________________________________________________________________________

IFF  .. ELSE ENDIF  :  Programm-Verzweigungsbefehle zur einmaligen Ausfhrung

Sollen im Gegensatz zu IF / ELSE/ENDIF die Programmteile zwischen IF .. ELSE
bzw. ELSE .. ENDIF nur EINMAL beim Auftreten der entsprechenden Bedingung
durchgefhrt werden, wird der Befehl IFF verwendet.
Intern wird dazu pro Hintergrundprogramm ein permanentes Flag (IFF) sowie ein
flchtiges Flag (IFF+), das stets nach Power-On initialisiert wird, auto-
matisch verwaltet. Bei der H-Programmierung werden beide Flags initialisiert.
In einem H-Programm (mit seinen Unter-P-Programmen) kann also der IFF und der
IFF+ Befehl jeweils nur ein einziges Mal verwendet werden.

Aufruf  :       IFF                     ELSE            ENDIF
Stack   :       <bedingung> >>> -       - >>> -         - >>> -
Ext.    :       +  (IFF+ Flag wird nach Power-On stets neu initialisiert)

- IFF mit Zeitvergleich: siehe ZEITVERGLEICH
- Der IFF-Vergleich kann auch auerhalb eines H-Programms ausgefhrt werden,
  die beiden Merker-Flags kennen jedoch dann keine "Vorgeschichte", sie
  werden bei Programmstart initialisiert.

Beispiel:
  Wenn am binren Eingang 8 +24V angelegt werden, soll einmalig der EIN-
  Zeitpunkt, bei Rckkehr auf 0V einmalig der AUS-Zeitpunkt ausgegeben
  werden:
        H 10 = 'IN- 8, IFF,  zeit,!+ ":EIN",  ELSE,  zeit,!+ ":AUS"'

______________________________________________________________________________

INDEX   : Berechnung eines Index fr die Datenliste

Aufruf: INDEX *
Stack:  - >>> 'Index des zeitlich ersten Eintrags'

Aufruf: INDEX **
Stack:  - >>> 'maximale mgliche Anzahl der Eintrge'

Aufruf: INDEX <abDatum/abZeit> [<abZeit>]
Stack:  - >>> 'Index fr Suchzeit'
ext:    +    : Index fr Suchzeit - 1 (vermeidet berlappungen)
        //   : statt "bis" wird "von" Zeit gesucht
Beispiel:      INDEX 17.03 12:15, eint##/ 1..4 . *

- Fr den dem INDEX-Befehl nachfolgenden Befehl (in der Zeile) kann die
  Gltigkeit der INDEX-Nummer garantiert werden, unabhngig von einer
  zwischenzeitlichen Intervallgrenze (Gltigkeit mindestens 0.3s).
- Intervallgrenzen whrend eines EINT-Befehls bringen die Datenausgabe
  nicht durcheinander.

______________________________________________________________________________

INDIR   : berprft, ob eine Kennung im Verzeichnis(Dir) vorhanden ist

Aufruf  : INDIR
Ausgabe : nein
Stack   : <kennungnr>  >>>  (1: <kennungnr> im DIR / 0: nicht vorhanden)

Aufruf  : INDIR <kennungnr>
Stack   : - >>>  (1: <kennungnr> im DIR / 0: nicht vorhanden)

Aufruf  : INDIR*
Stack   : - >>> (1: "aktuelle" Kennung im DIR / 0: nicht vorhanden)

- Ext. '-' ignoriert die Prompt-Station wie bei ALL- (U1600: b.v.).

Beispiele:
* Sobald Station G3 im ECS-LAN ist, erscheint fr 10s "G3 im Netz" auf allen
  LCD-Displays:
    <A> H=' G3:indir*, iff, all, meld "G3 im Netz" 10
* Der ALL-Schleifen-Befehl wird nur zur Demonstration "zu Fu" geschrieben:
    'ALL, ....... , NEXTA, ...'   entspricht:
    '1,255,fori,i,indir .,if,i,an:, ....... , endif,nexti, zz:, ...'

______________________________________________________________________________

INPUT (IN)  :  Einlesen des Eingangs-Zustands

Aufruf: IN <aufzhlung>
Stack:  - >>> (1: 24V liegen an, 0: 0V liegen an)
ext:    + - . # %

______________________________________________________________________________

INTERVALL (ITV)  : Synchron-Intervall

Aufruf  : INTERVALL [=<dauer>]                  <dauer> : 10s .. 999h
oder    : INTERVALL [=<zahl>__<einheit>]        <einheit> : s | m | h
                                                (ohne <einheit> : Sekunden)
Ausgabe : ja
Stack   : - >>> <dauerInSekunden>
Ext.    : + - . # | %

Beispiel: INTERVALL =15 M   oder   INTERVALL = 35s

- Bruchteile von Stunden oder Minuten mssen umgerechnet werden:
  1h30 --> 90m oder 5400 s.
- bei der Ausgabe wird stets versucht, die grte Zeiteinheit darzustellen.
- siehe auch INTERVALLQUELLE und SYNC

______________________________________________________________________________

INTERVALLQUELLE (IQ)    : Quelle zur Erzeugung des Synchron-Intervalls
TARIFQUELLE     (TQ)    : Quelle zur Erzeugung des aktuellen Tarifs
                          T1 oder T2

Aufruf  : IntervallQuelle [=<quelle>]
Ausgabe : ja
Stack   : - >>> <quellenzahl>
Ext.    : + - . # $ %

                <quelle>         ==     <quellenzahl>
INTERVALL :     1 .. 12                 1 .. 12         (U1600: 1 .. 24)
                K  |  Kanal             11 (U1601),  23 (U1600)
                Z  |  Zeit              99
                P  |  Programm          100
TARIF     :     1 .. 12                 1 .. 12         (U1600: 1 .. 24)
                K  |  Kanal             12 (U1601),  24 (U1600)
                P  |  Programm          100

Beispiele:
        Tarif von Kanal 7:              TARIFquelle = 7
        Intervall zeitabhngig:         IQ = Z

______________________________________________________________________________

KANAL (KAN)      :  der Name des Kanals (max. 8 Zeichen)
LANGNAME (LNAME) :  der Langname des Kanals (max. 20 Zeichen)

Aufruf  :  KANAL <aufzhlung> [=<zeichenkette>]
Ausgabe :  ja
Ablage  :  <name>
Stack   :  - >>> -
Ext.    :  + - . # $ %

Zeichenvorrat:
==============
- Es knnen alle ASCII-Zeichen (auer Steuerzeichen) verwendet werden, mit
  Ausnahme der folgenden Zeichen :  ','  ';'  <leerzeichen>
  ',' und ';' werden in '_' verwandelt, ein <leerzeichen> wird als String-
  Ende angesehen. Die Zuweisung KANAL <aufzhlung> = "$" weist nicht etwa
  das Dollarzeichem dem Kanalnamen zu, sondern den Zwischenablageninhalt.
- Kanalnamen knnen systemweit gesucht werden, wenn folgende Einschrnkung
  beachtet wird: das 1. Zeichen mu ein Buchstabe sein.
- Damit die Kanalnamen fr dBASE-Feldbezeichner benutzt werden knnen, darf
  auer Zahlen und Buchstaben nur '_' verwendet werden. Das erste Zeichen mu
  ein Buchstabe sein.

______________________________________________________________________________

KENN    :  Kennung als Nummer auf den Stack.  (Kennung einstellen mit SETKENN)
=========
Aufruf  :  KENN
Stack   :  -  >>>  <aktuelleKennungNummer>
Aufruf  :  KENN <kennungNummer>
Stack   :  -  >>>  <kennungNummer>
Ausgabe :  nein (ohne Ext.), ja (mit Ext.)
Stack   :  -  >>>  <kennungNummer>
Ext.    :  ! + - . # %

- Kennung-zu-Kennungsnummer-Beziehung:
  A: 1, A1: 2, ... B: 11, C: 21, ... Z4: 255
- Umwandlung einer Kennung --> Kennungsnummer:  <kennung>:KENN#
- Umwandlung einer Kennungsnummer --> Kennung:  KENN! <kennungNummer>
- weitere Infos zu Kennungen bei KENNUNG.

Beispiel:  z4:kenn, !      kenn! 21        kenn. 21        kenn# 21
           255             C:              C               21

Einflu der Extension '&' auf allgemeine Befehlsausgaben:
=========================================================
 &        : Kennungsausgabe am Zeilenanfang.    Eges& 1   --> A:EGes....
 &#       :   <kenn>:<w1>                       Eges&# 1  --> A:123.4
 &#.      :   <kenn>;<w1>                       Eges&#. 1 --> A;123.4
 &.       :   <kenn>;<w1a>;<w1b>;...            Eges&. 1  --> A;Eges;1;...
 &&       : Ausgabe der Kennung am Zeilenanfang und vor jedem Ausgabeblock.
 &&##     :   <kenn>:<w1>;<kenn>:<w2>;...
 &&##.    :   <kenn>;<w1>;<kenn>;<w2>;...
 &&..     :   <kenn>;<w1a>;<w1b>;..;<kenn>;<w2a>;<w2b>;..

______________________________________________________________________________

KMODE : Kanal-Modus

Aufruf  : KMODE <aufzhlung> [=<kanalmode>]
Ausgabe : ja
Stack   : - >>> -
Ext.    : + - . # $ % ?
                                                ---- mgliche Kanle ----
<kanalmode>                                     U1601   U1602   U1603
0 : OFF    AUS                                  1..64   1..64   1..64
1 : ANA    Analog-E/A (ANA)                     1..14   -       1..6+13+14
2 : P->E   PMOM=ANA --> ENERGIE                 1..12   -       1..6
3 : COUN   ANA-IMPULSE --> ENERGIE / PMOM       1..12   -       1..6
4 : LON    LON-Zhler --> ENERGIE / PMOM        1..64   1..64   1..64
5 : LonA   LON-Analog-E/A (LONANA)              1..64   1..64   1..64
6 : L-PE   wie LONA plus LONANA --> ENERGIE     1..64   1..64   1..64
7 : LonI   LON-Binr-Inputs                     1..64   1..64   1..64
8 : LonR   LON-Relais                           1..64   1..64   1..64

- KMODE entspricht bei Analog-Kanlen dem Befehl ANAMODE
  ANAMODE **    : Mode aller Analog-Kanle (U1601/2/3: 1..14)
  KMODE **      : Mode aller Kanle (U1601: 1..64)
- LISTKMODE gibt eine Liste aller verfgbaren Zuordnungen aus.
- KMODE ist bei U1600/10/15 nicht verfgbar (bei U1615 ANAMODE verwenden),
  die Ext. '?' unterdrckt Fehlermeldung "Syntax-Fehler" oder "Funktion nicht
  verfgbar".

______________________________________________________________________________

KOSTFAK1 KOSTFAK2 : Kostenfaktoren der Tarife 1 + 2:
=================
Aufruf  :  KOSTFAK1 [=<faktor>]
Ausgabe :  ja
Stack   :  - >>> <faktor>
Ext.    :  + - . # %


TFIX : Fixpunkt Kosten
====
Aufruf  :  TFIX [=<fix>]
Ausgabe :  ja
Stack   :  - >>> <fix>
Ext.    :  + - . # %

______________________________________________________________________________

LOESCHKANAL (ERAKAN)    : Lschen aller Medaten eines Kanals
--------------------      (auer der Medatenliste ohne EINT-0)
Aufruf:  LOESCHKANAL = <kanalaufzhlung>


LOESCHLISTE (ERALIS)    : Lschen der Intervall-Medatenliste ab Index.
--------------------
Aufruf:  LOESCHLISTE = <abindex>   : Lschen einschlielich <abindex> .. Ende
         LOESCHLISTE = *           : gesamte Liste

______________________________________________________________________________

LON-spezifische Befehle (beginnen stets mit Lon...)
===================================================

LON-MESSDATEN:
--------------
LonZW <k>               : Zhlerwert des LON-Zhlers [LonCR]
LonE <k>                : Energie des LON-Kanals, entspricht LonZW
LonP <k>                : Momentan-Leistung des LON-Kanals
LonANA <k>              : optionaler Analog-Wert des LON-Kanals

LON-PARAMETER:
--------------
LonKANal <k> [= <w>]    : Unterkanal-Auswahl des LON-Kanals [LonCHANel]
LonFAKTOR <k> [= <w>]   : optionaler Bewertungs-Faktor [LonFACTOR]
LonOFFSET <k> [= <w>]   : optionaler Bewertungs-Offset
LonSTOP <k> [= <w>]     : Aktivitt des LON-Kanals; <w>:  1=stop, 0=run

LonPOLLDELay [= <w>]    : Polling-Delay [ms];  <w> : 0..32767   (Default=0)
LonSTATTIMing [= <w>]   : Stations-Timingcode; <w> : 0..15      (Default=9)
LonSUBNODE [=<s_n>]     : Lesen und Schreiben der SUBNET- und NODE-Adresse in
                          der Form <s_n> : SxxxNyyy
                          xxx : SUBNET-Adresse (1..255)
                          yyy : NODE-Adresse (1..127)
                          Beispiel: LonSUBNODE = S22N003

LON-RELAIS und INPUTS:
----------------------
LonRel <k> [<bit>] [= <w>]      : Ansprache von LON-Relais
LonInp <k> [<bit>] [= <w>]      : Ansprache von LON-Inputs (binr)


LON-ALLGEMEIN (nur Abfrage):
----------------------------
LonVER                  : Version des U1601 LON-EPROMs
LonUSERS                : Anzahl der aktiven LON-User
LonUSE <k>              : 1=LON-Kanal aktiv (run), 0=nicht aktiv
LonUSE* <k>             : 1=LON-Kanal aktiv (run oder stop), 0=nicht aktiv
LonTYPe <k>             : Gertetyp des LON-Kanals
LonMAXKANal <k>         : Anzahl der verfgbaren Unterkanle; wenn LonUSE==0,
                          wird 16 geliefert. [LonMAXCHANnel]
LonSHOWZW <k>           : 1=LonZW sinnvoll+anzeigen,
                          0=LonZW nicht sinnvoll+anzeigen. [LonSHOWCR]
LonNEU <k>              : Neuinstallation des LON-Kanals

Hinweise:
---------
- Alle LON-Befehle beginnen mit Lon..., gefolgt von max. 9 Buchstaben.
  Die GROSS-geschriebenen Buchstaben mssen verwendet werden, die kleinen
  Buchstaben AM ENDE des Befehls knnen weggelassen werden.
- Typisch englische Befehle werden in [eckigen Klammern] genannt, englische
  und deutsche Befehle knnen beliebig gemischt werden, unabhngig von der
  eingestellten Dialogsprache.
- Bei einem Kommunikationsfehler mit dem LON-Knoten werden die oben genannten
  LON-MESSDATEN nach dem 6. erfolglosen Kommunikationsversuch auf Null gesetzt.
- Bei der Ansprache von Relais oder Inputs kann bitweise (bei Angabe des
  <bit> Parameters) oder auf das ganze Wort zugegriffen werden.
  <bit> : Bitnummer mit 1=LSBit, 32=MSBit
  Beispiel: Relais 1..4 werden mit einem Befehl gesetzt, spter das 2. Relais
  ausgeschaltet (Lon-Relaismodul: Kanal 36).
        LonREL 36 = 0b1111      oder    LonR 36=15
        LonREL 36 2 = 0

Syntax-Beschreibung einiger typischer Lon-Befehle
=================================================

LonID   : LON-NeuronID des LON-Knotens abfragen/eingeben
--------
Aufruf  : LONID <kanal> [=<lon_id>]
Ausgabe : ja
Ablage  : <lon_id>
Stack   : - >>> -
Ext.    : + - # . %  ?

- <lon_id> : 12-stelliger HEX-Zahlenstring
- Beispiel : LONID 1 = 01002a201F00

LonSTOP : Aktivitt des LON-Kanals (run oder stopped)
--------
Aufruf  : LONSTOP <kanal> [=<wert>]
Ausgabe : ja
Stack   : - >>> <wert>                  <wert> : 0=run, 1=stopped
Ext.    : + - # . % ?

LonZW   : Zhlerwert des LON-Zhlers
--------
Aufruf  : LONZW <kanal>
Ausgabe : ja
Stack   : - >>> <wert>
Ext.    : + - # . % ?

______________________________________________________________________________

MENUAPP MENUAPPN : Men-Anwendungen definieren
==============================================
- Mit MENUAPPN wird die Bezeichnung einer Men-Anwendung festgelegt, mit
  MENUAPP wird ein P-Programm einer Men-Anwendung zugeordnet.
  Men-Applikationen werden von der Hintergrundprogramm-Task zwischen
  H-Programmen ausgefhrt.

MENUAPP                                                         (U1600: n.v.)
-------
Aufruf  :  MENUAPP <menuapp_aufz> [= <p_prog_nummer>]
Ausgabe :  Ja
Stack   :  - >>> -

MENUAPPN                                                        (U1600: n.v.)
--------
Aufruf  :  MENUAPPN <menuapp_aufz> [= <app_bezeichnung>]
Ausgabe :  Ja
Ablage  :  <app_bezeichnung>
Stack   :  - >>> -

- Es stehen 3*5 Anwendungen zur Verfgung. Bereich von <menuapp_aufz>:
  Anwendungen (1) : 1..5
  Anwendungen (2) : 6..10
  Anwendungen (3) : 11..15
- <p_prog_nummer> ist die Nummer des zugeordneten P-Programms (0 .. 31), soll
  keine Aktion ausgefhrt werden, mu -1 zugewiesen werden.
  Addiert man zu <p_prog_nummer> +100, so wird nach dem F-Tastendruck im
  Applikationsmen dieses nicht verlassen (sonst zurck zur letzten
  Grundanzeige).
- <app_bezeichnung> kann max. 10 Zeichen lang sein, Leerzeichen, ',' und ';'
  drfen verwendet werden.
- Beginnt <app_bezeichnung> mit einer Tilde '~', so wird eine optionale
  Passwortabfrage fr diesen Menpunkt unterdrckt. Diese Tilde wird in den
  Mens nicht dargestellt. (verfgbar bei Versionen ab dem 19.02.2001).
- U1600/10/15: MENUAPP/MENUAPPN sind hier nicht verfgbar. Das Hintergrund-
  programm H 19 wird zur sog. Druckausgabe verwendet.


MENUEDIT : Editiermglichkeit in Men-Anwendungen               (U1600: n.v.)
=================================================
Aufruf  :  MENUEDIT <mode> <n> = <titel> [<unterwert> [<oberwert>]]
Ausgabe :  Nein                         <mode>      : Variable A | a | B | b
Stack   :  - >>> -                      <n>         : Index der Var. A oder B
Ext.    :  @                            <titel>     : Titel-String (max.16 Z.)
                                        <unterwert> : Zahlen-Unterwert
                                        <oberwert>  : Zahlen-Oberwert
- Ext. '@' ermglicht die Ablehnung von Nullwerten.
- Das Editieren kann nur whrend offener Anwendungsmens ausgefhrt werden,
  daher mu stets 100 zur P-Programmnummer fr MenuApp addiert werden.
- Beispiel: In A 14 ist ein Wert fr einen Grenzwertalarm 1, in A 15 der Wert
  fr Alarm 2 enthalten. Mit F4 und F5 im 1. Anwendungsmen kann nun A14 und
  A15 unter Beachtung von bestimmten Unter/Oberwerten editiert werden.
        MenuApp 04 = 114
        MenuApp 05 = 115
        MenuAppN 04 = 'Alarm 1'
        MenuAppN 05 = 'Alarm 2'
        P 14 = 'MenuEdit a 14 = "Alarm 1  [1..40]" 1 40'
        P 15 = 'MenuEdit a 15 = "Alarm 2  [1..50]" 1 50'


EVENTAPP : P-Programmausfhrung beim Auftreten von Ereignissen  (U1600: n.v.)
==============================================================
Aufruf  :  EVENTAPP <event_nummer_aufz> [= <p_prog_nummer>]
Ausgabe :  ja
Stack   :  - >>> <p_prog_nummer>

- Sobald ein Ereignis mit <event_nummer_aufz> auftritt, wird das P-Programm
  <p_prog_nummer> ausgefhrt; diese Ereignis-Applikationen (Event-Apps)
  werden von der Hintergrundprogramm-Task zwischen H-Programmen ausgefhrt.
- <event_nummer_aufz> gibt das gewnschte Ereignis als Zahl (Bereich 1..32)
  an. Welche Ereignisse in einem Gert verfgbar sind, knnen sie mit
  dem Befehl LISTEVENTS auflisten lassen.
  Zuordnung aller gltigen Ereignisse ausgeben (die Aufzhlung *ev enthlt nur
  gltige Ereignisse):
        EVENTAPP *ev
- <p_prog_nummer> ist die Nummer des zugeordneten P-Programms (0 .. 31), soll
  keine Aktion ausgefhrt werden, mu -1 zugewiesen werden.

LISTEVENTs : Liste aller gltigen Ereignisse                    (U1600: n.v.)
--------------------------------------------
Aufruf  :  LISTEVENTs
Ausgabe :  ja
Stack   :  - >>> -

Beispiel-Ausgabe (abhngig vom angesprochenen Gert):
01:Reset                Event bei Power-On-Reset, garantiert vor Ausfhrung
                        des ersten H-Programms.
11:AppMenuOpen          Event beim ffnen des Applikationsmens.
12:AppMenuClose         Event beim Schlieen des Applikationsmens.
13:KeyESCESC            Event beim lngeren Drcken der ESC-Taste (>0.6s)
                        in einer Grundanzeige (nicht beim Verlassen von Mens).

______________________________________________________________________________

MELD    :  Anzeige einer Meldung im LCD-Display fr eine bestimmte Zeit.
====       Abbruch der Meldungsanzeige beim Drcken einer Panel-Taste.

Aufruf  :  MELD <string>  [<Dauer-in-Sek>]  (max. 60s, Default=5s)
Stack   :  - >>> -
Beispiel:  MELD "! Motor defekt !"      --->    "! Motor defekt !"
                                                "****************"

MELD2   :  Anzeige einer ZWEIzeiligen Meldung im LCD-Display...
=====
Aufruf  :  MELD2 <string1> [<string2> [<dauer_in_sek>]]
Stack   :  - >>> -
Beispiel:  2,1,MELD2 "%!. Zeile""%!. Zeile"  --->  "1. Zeile        "
                                                   "2. Zeile        "

- Soll die Meldung unbegrenzt lange stehen bleiben (bis zum nchsten
  Tastendruck), so wird <dauer_in_sek> mit 99 angegeben.
- Ext. '-' kopiert die Meldung in die Zwischenablage.
- Wenn whrend der Meldung Tasten gedrckt werden, so wird die Anzeige der
  Meldung abgebrochen. Mit der Ext. '_' lt sich die Meldung auch anzeigen,
  wenn whrend der Meldung Tasten gedrckt werden.
- Nur fr U1600/10/15 Stationen gilt: wird bei MELD2 fr <string1> oder
  <string2> ein leerer String "" angegeben, bleibt die entsprechende
  Display-Zeile unberhrt (auer wenn die Ext. '*' oder als Argument " "
  verwendet wird).

______________________________________________________________________________

TAGBEG  :  Variabler Tagesanfang. Default-Einstellung = 00:00:00
           Diese Einstellung wirkt sich auf alle vergangenen und zuknftigen
           Tagesanfnge aus und darf nicht dynamisch verndert werden!
Aufruf  :  TAGBEG [= <tagesanfangs_zeit>]
Ausgabe :  ja
Stack   :  - >>> <tagesanfangs_zeit>
Ext.    :  - . # &
---------
MONBEG  :  Variabler Monats-/Jahresanfang. Jeder Monat kann an einem
           beliebigen Tag, jedes Jahr an einem beliebigen Monat anfangen.
           Setzen des variablen Modes, sobald eine Zuweisung erfolgt.
           Der Anfang eines Tages kann mit TAGBEG festgelegt werden.

Aufruf  :  MONBEG <MonatsAufzhlung> [<Jahr> [<bisJahr>]]  [= <StartTag>]
Ausgabe :  ja
Stack   :  - >>> <StartTag>           <Jahr> : 90..99,0..30 oder 1990..2030
Ext.    :  - . # &

- die optionale Angabe von <bisJahr> erlaubt die Verarbeitung von mehreren
  Jahren gleichzeitig (U1600: b.v.).

MONBEG@ = 0     : zurck zum Normalzustand (Beginn stets am Ersten).
MONBEG@@ = 0    : zurck zum Normalzustand, Rcksetzen der Eintrge.
MONBEG@ = 1     : variabler Mode mit den ehemaligen Eintrgen.
MONBEG@         : - >>> <zustand>       <zustand> : 0=Normal, 1=variabler Mode

Beispiel:       (wird <Jahr> weggelassen, gilt das aktuelle Jahr)
        MONBEG 1..12 = 17       : Monate 1..12 beginnen am 17. des Monats,
        MONBEG 0 = 10           : das Jahr beginnt im Oktober (hier: 17.10.).
        MONBEG 0 1998 = 2       : 1998 beginnt im Februar.

______________________________________________________________________________

Ausgabe von REAL-Zahlen im 32 oder 64 Bit IEEE-HEX-Format
=========================================================
Umschaltung auf den gewhlten Ausgabemode erfolgt fr den Rest der Zeile.

NF4M    : Ausgabe von REAL-Zahlen (4-Byte FLOAT) im 32 Bit IEEE-HEX-Format
          MOTOROLA-Byte Ordering, 8 HEX-Zeichen.
NF4I    : Ausgabe von REAL-Zahlen (4-Byte FLOAT) im 32 Bit IEEE-HEX-Format
          INTEL-Byte Ordering, 8 HEX-Zeichen.
NF8M    : Ausgabe von REAL-Zahlen (8-Byte DOUBLE) im 64 Bit IEEE-HEX-Format
          MOTOROLA-Byte Ordering, 16 HEX-Zeichen.
NF8I    : Ausgabe von REAL-Zahlen (8-Byte DOUBLE) im 64 Bit IEEE-HEX-Format
          INTEL-Byte Ordering, 16 HEX-Zeichen.
NFSTD   : auf Standard-Ausgabe zurckstellen.

- Von der globalen Ausgabe-nderung sind alle Zahlenausgaben fr den Rest
  der Zeile betroffen.
- Ohne Umschaltung lassen sich die verschiedenen IEEE-HEX-Formatausgaben
  mittels freier Formatierung wie folgt erzeugen:
        <befehl>% "%4__w"       : MOTOROLA FLOAT-HEX    (2x Unterstrich)
        <befehl>% "%8__w"       : MOTOROLA DOUBLE-HEX
        <befehl>% "%4___w"      : INTEL FLOAT-HEX       (3x Unterstrich)
        <befehl>% "%8___w"      : INTEL DOUBLE-HEX
  Statt dem Bezeichner w knnen auch alle anderen Zahlenbezeichner (i,k,!,#)
  verwendet werden.


Eingabe von REAL-Zahlen im 32 oder 64 Bit IEEE-HEX-Format
=========================================================
                                        Stack:
NF4M <float_hex_motorola>       :       - >>> <real>
NF4I <float_hex_intel>          :       - >>> <real>
NF8M <double_hex_motorola>      :       - >>> <real>
NF8I <double_hex_intel>         :       - >>> <real>

- der NF.. Befehl dient zur Ein- und Ausgabe von Zahlen im 32- oder 64-Bit
  IEEE-Format (die Station arbeitet intern mit diesen Zahlenformaten).
  Dargestellt werden die 4 oder 8 Byte als 8- oder 16-stellige HEX-Zahlen
  (2 Zeichen 0..9+a..f pro Byte), d.h. 32-Bit float Zahlen belegen 8 Zeichen
  (4 Byte, nf4i oder nf4m) und 64-Bit double-Zahlen belegen 16 Zeichen
  (8 Byte, nf8i oder nf8m).
- Ausgaben mit NF.. sind deutlich schneller als Standard-Ausgaben mit
  mehreren Nachkommastellen.
- Das MOTOROLA-Byte-Ordering (nf4m oder nf8m) fngt links mit dem MSBit an,
  rechts steht das LSBit:

  MOTOROLA:     B31..B24 B23..B16 B15..B8 B7..B0
  INTEL:        B7..B0 B15..B8 B23..B16 B31..B24

Beispiel:
  nf4m,12345678,!       -->     4B3C614E        (MOTOROLA)
  nf4m 4B3C614E,!       -->     12345678

  nf4i,12345678,!       -->     4E613C4B        (INTEL)
  nf4i 4E613C4B,!       -->     12345678

______________________________________________________________________________

P 0 .. P 31 :   Programme P0 .. P31 ausfhren / programmieren
Q 0 .. Q 31 :   Programme Q0 .. Q31 ausfhren / programmieren   (U1600: n.v.)

Aufruf  :       P <aufzhlung> [=<programm>]
Ausgabe :       nein            (ja bei den genannten Ext. auer '-' und '?')
Ablage  :       <programm>      (auer bei Ausfhrung)
Stack   :       - >>> -         (auer bei Ext. '?', s.u.)
Ext     :       + - . # $ ! % ?

- P ohne <index> == P 0,   P1 .. P31 == P 1 .. P 31,   P5! == P! 5
- Bei beliebiger Extension erfolgt keine Programm-Ausfhrung.
- Maximale Verschachtelungstiefe: 10, maximale Zeilenlnge: 128
- Beim Lesen: <programm> --> Zwischenablage (auer bei Ext."--" oder Ausfhr.)
- Nicht genutzte P-Programme knnen als String-Speicher verwendet werden.
- P@ oder DO $ fhren den Inhalt der Ablage als Programm aus.
- Der Adress-Kontext eines P-Programmes bestimmt den Ursprung des Programm-
  textes, NICHT jedoch den Adress-Kontext, unter dem die einzelnen Befehle
  des Programms ausgefhrt werden. Hier gilt der aktuelle Zeilen-Kontext,
  dieser kann also durchaus von ein P-Programm verndert werden.
  Ein Beispiel mit ALL finden Sie bei KENNUNG.
- I,J,K Variablen gelten lokal, d.h. eine Programm-Ebene hat keinen Zugang
  auf die I,J,K Variablen der darunter liegenden Ebenen.
- Bei der Ausfhrung knnen zustzliche Zahlenargumente angegeben werden,
  die dann einmalig vor der Ausfhrung in der Reihenfolge von links nach
  rechts auf den Stack gepusht werden:
    1,2,3, P 15, ...    ==      P 15 1 2 3, ...     ==    P15 1 2 3, ...
    1,2,3, P 1..4, ...  ==      P 1..4 1 2 3, ...
- P? schiebt Nummer (0..31, -1:keins) des aktuellen P-Programms auf den Stack.
- Q-Programme Q 0 .. Q 31 sind ab Firmware-Stand April 2001 verfgbar.

* Aufruf eines P-Programmes mit freidefinierbarem Namen: siehe REM
* Auflisten aller P's              :    P! *            oder      PLIST
* Kopieren von P 7 in P 13         :    p- 7,P 13=$     oder      p7-,p13=$
* Kopiert alle P's nach Station B  :    fori 0..31, i,p- ., i,B:p .=$

PLIST : P-Programme auflisten
QLIST : Q-Programme auflisten                                   (U1600: n.v.)
=============================
PLIST                   : alle P-Programme auflisten, entspricht:  P! *
PLIST <aufzhlung>      : entspricht:  P! <aufzhlung>
PLIST*                  : alle nicht-leeren P-Programme auflisten (U1600: b.v.)


DO              : Ausfhren eines Programmstrings               (U1600: b.v.)
================
Aufruf          : DO <programm>
Ausgabe         : nein
Stack           : - >>> -

- Adress-Angabe bei DO hat keine Auswirkung.
- I,J,K Variablen gelten lokal, d.h. eine Programm-Ebene hat keinen Zugang
  auf die I,J,K Variablen der darunter liegenden Ebenen.

DOWHILE (DOWH)  : Ausfhren eines Programmstrings, solange      (U1600: b.v.)
================  eine Bedingung erfllt ist
Aufruf          : DO <programm>
Ausgabe         : nein
Stack           : <bedingung> >>> -

- Eine Zahl wird vom Stack genommen und auf die nchste Ganzzahl gerundet
 (5/4). Wenn diese Zahl ungleich Null ist, wird <programm> ausgefhrt.
  Nach der Ausfhrung wird wieder eine Zahl vom Stack genommen und der
  Vorgang wiederholt, bis diese Zahl gleich Null ist.
- Adress-Angabe bei DOWHILE hat keine Auswirkung.
- I,J,K Variablen gelten lokal, d.h. eine Programm-Ebene hat keinen Zugang
  auf die I,J,K Variablen der darunter liegenden Ebenen.

Beispiel fr DOWHILE:
  Runterzhlen von 10 auf 1:
  10, dup, dowhile '! "noch %#",1,-,dup'

______________________________________________________________________________

PASSWORT : Sichern des Zugriffs per RS232 auf die Station / ECS-LAN.
==========
 Ein Master-Nutzer (Nutzer 1) und vier weitere Nutzer (Nutzer 2..5) knnen
 verschiedene Passwrter (Zahlen im Bereich 1..999999999) erhalten. Der
 Master-Nutzer kann das Zugriffsrecht der einzelnen Nutzer individuell
 einstellen, die Nutzer knnen ihr Passwort - soweit das alte bekannt ist -
 verndern. Das bei Master-Nutzer eingetragene Zugriffsrecht gilt, wenn kein
 Nutzer eingeloggt (Nutzer 0) oder das Timeout abgelaufen ist. Der Master hat
 stets alle Rechte (=5). Anfangs sind alle Passwrter =0, nur der Master kann
 0-Passwrter ndern. Zum Lschen aller Passwrter: Master-Passwort=0.

 !!!!!!!!!!!! ACHTUNG: Falsche Eingaben bewirken u.U. Zeitsperren !!!!!!!!!!!!

        <nutzer>  : 1=Master=Nutzer-1, 2..5=Nutzer-1..5, 0=aktueller Nutzer
        <passwort>: 1..999999999, 0:Lschen
        <pw_alt>  : altes Passwort oder Master-Pw als Berechtigung
        <pw_neu>  : neues Passwort (mu wiederholt werden)
        <rechte>  : Zugangs-Rechte, s.u.
        <timeout> : in Minuten, 0=kein Timeout
        <frei>    : 1=befreit, 0=nicht befreit
        <com_i>   : COM-Zugang: 1=COM-1, 2=COM-2, 0=aktueller Zugang

LOGIN...........Einloggen unter einem Passwort
  Aufruf : LOGIN <nutzer> <passwort>
  Ausgabe: Ja
  Stack  : - >>> -

LOGOUT..........Ausloggen
  Aufruf : LOGOUT
  Ausgabe: Nein
  Stack  : - >>> -

WHOAMI..........Abfragen der Nutzer-Nummer und der Zugriffsrechte (Who am I)
  Aufruf : WHOAMI
  Ausgabe: Ja
  Stack  : - >>> -

PASSWORT........Einstellen der Gertepasswrter und Zugriffsberechtigungen
  Aufruf : PASSWORT  <nutzer> <pw_alt> = <pw_neu> <pw_neu> <rechte> <timeout>
           PASSWORT  <nutzer> <pw_alt> = <pw_neu> <pw_neu>
           PASSWORT* <nutzer> <pw_alt> = <rechte> <timeout>
  Stack  : - >>> -

  Aufruf : PASSWORT             --> Ausgabe des aktuellen Nutzers
           PASSWORT  <nutzer>   --> Ausgabe der Rechte von <nutzer>
           PASSWORT  *          --> Ausgabe der Rechte von <nutzer> 1..5
  Stack  : - >>> <timeout> <rechte> <nutzer>

PWLRELEASE......Befreien bestimmter ECL COM-Zugnge             (U1600: n.v.)
(PWLREL)        vom Passwort-Schutz (PasswordLockRelease).
  Aufruf : PWLRELEASE <com_i> <master_pw> = <frei>
  Aufruf : PWLRELEASE <com_i>
  Ausgabe: Ja
  Stack  : - >>> <frei>


- Wird '*' zur Listenausgabe verwendet, beziehen sich die Stack-Werte auf
  das erste angezeigte Element. Eine Summenbildung ist hier nicht sinnvoll.
- Mit Ext. '|' pusht PASSWORT bei Ausgabe zustzlich <com_i> auf den Stack.
  <com_i> ist nur bei aktuellem Nutzer definiert (1:COM-1, 2:COM-2), an-
  sonsten wird Null gepusht.                                    (U1600: n.v.)
        PASSWORT|
        Stack:  - >>> <com_i> <timeout> <rechte> <nutzer>

Systemweite Passwort-Verwaltung
-------------------------------
- Der PASSWORT-Befehl arbeitet systemweit, d.h. von einer Station knnen
  alle Zugangsberechtigungen verwaltet werden. Die Zugangssperre jedoch
  WIRKT SICH NUR AUF DEN LOKALEN RS-232 Zugang aus. Wenn sich ein Nutzer
  mit LOGIN anmeldet, so sind damit seine Zugriffrechte fr die lokale
  Station und fr alle anderen Stationen im ECL-LAN festgelegt (s.u.).
  Beim Anmelden gelten die Passwrter, Rechte und Timeout-Zeiten der lokalen
  Station.
  Bei der Vergabe von Passwrtern ist also Vorsicht geboten, dass der Adress-
  kontext auf die lokale Station (Spezialkennung AA:) verweist, wenn der
  PASSWORT-Befehl ausgefhrt wird. Ein Voranstellen der Spezialkennung
  AA:PASSWORT ... ist also ein wirksamer Schutz vor Seiteneffekten.

Freigeben einzelner ECL-Zugnge
-------------------------------
- U1600/10/15 haben nur einen ECL-Zugang (COM-1). Bei Stationen mit mehreren
  ECL-Zugngen (COM-1,COM-2) werden zwar die selben Passwrter und Zugangs-
  rechte/Timeoutzeiten fr alle Zugnge verwendet, der Zustand ist jedoch
  fr jeden Zugang vollstndig entkoppelt. So kann auf COM-1 Nutzer-2 einge-
  loggt sein, auf COM-2 Nutzer-5. Wird also der aktuelle Nutzer abgefragt,
  ist die Angabe des Zugangs notwendig, ohne Angabe gilt der aktuelle Zu-
  gang (wie WHOAMI, jedoch mit Stack-Ausgabe).
        PASSWORT 0 <com_i>      --> Ausgabe des aktuellen Nutzer auf <com_i>
        PASSWORT 0 2            --> Ausgabe des aktuellen Nutzer auf COM-2
        PASSWORT 0 *            --> Ausgabe der aktuellen Nutzer auf COM-1+2

Bedienpanel-Passwrter
----------------------
- Mit PASSWORT knnen auch die Panel-Passwrter verndert werden. Hierzu
  werden die folgenden <nutzer>-Nummern verwendet:              (U1600: n.v.)
    101         :  Nutzer-1 (Master)
    102..105    :  Nutzer-2 .. Nutzer-5
  Zugriffsrechte und Timeout-Zeiten werden hier nicht verwendet. Wie auch bei
  den ECL-Passwrtern gilt: der Master (Nutzer-1) kann alle Panel-Passwrter
  ndern, die anderen Nutzer nur ihr eigenes Panel-Passwort. Gelscht wird
  ein Panel-Passwort durch die Angabe 0 oder 111111. Wird das Master-Panel-
  Passwort gelscht, wird zwar der Zugangschutz aufgehoben, die andern Panel-
  Passwrter bleiben jedoch erhalten.
  Hinweis: Panel-Passwrter sind NICHT identisch mit den ECL-Passwrtern.
  U1600/10/15-Stationen kennen nur ein Panel-Passwort, dieses wird mit der
  <nutzer>-Nummer 101 oder 99 angesprochen.


----- Beispiele -----           Bitte Reihenfolge und Hinweise beachten !
Master gibt ein:
 aa:PASSWORT 1 0=123 123 0 5    : Master-Pw=123, 0-Nutzer-Rechte=0, Timeout=5m
 aa:PASSWORT 2 123=222 222 3 10 : Nutzer-2-Pw=222, Rechte=3, Timeout=10m
 aa:PASSWORT* 2 123=2 5         : nderung der Rechte=2 und Timeout=5m
Nutzer ndert Passwort:
 aa:passwort 2 222=2121 2121    : nderung des Passworts
Nutzer loggt sich ein:
 LOGIN 2 2121
Master lscht alle Passwrter:
 AA:PASSWORT 1 123=0 0


Zugriffsrecht:  ------Lokal------       -----ECS-LAN-----       Notation
==============  Lesen   Schreiben       Lesen   Schreiben
        0       -       -               -       -               [-- L:--]
        1       ja      -               -       -               [r- L:--]
        2       ja      -               ja      -               [r- L:r-]
        3       ja      ja              -       -               [rw L:--]
        4       ja      ja              ja      -               [rw L:r-]
        5       ja      ja              ja      ja              [rw L:rw]


______________________________________________________________________________

PAUSE (PP) : Pause in Sekunden

Der Programmablauf wird fr n Sekunden unterbrochen, auch Bruchteile
von Sekunden knnen angegeben werden. Die effektive Wartezeit ist stets
ein Vielfaches von 100 ms.

Aufruf  : PAUSE                 PAUSE <wert>
Ausgabe : keine                 keine
Stack   : <wert>  >>>  -        - >>> -

Hinweise:
- Maximale Pausendauer = 20s
- Zahlen fr n > 20 werden als Angabe in Millisekunden angesehen.
  Beispiel: 'Pause 2.2' entspricht 'Pause 2200', der Programmablauf
  wird fr 2,2 Sekunden unterbrochen.

______________________________________________________________________________

PEGEL   : Einstellen der Empfindlichkeit der Zhlereingnge.
          Schaltschwelle:  0=10%, 1=25%(Default), 2=50%, 3=70% von Fullrange.

Aufruf  : PEGEL [=<wert>]
Ausgabe : ja
Stack   : -  >>>  <wert>        (nur beim Lesen)
Ext.    : + - %                 <wert> :  0 (Lo) ... 3 (Hi), Vorgabe: 1

- Die Einstellung gilt fr alle Zhleingnge zusammen.
- Die Pegelerkennung arbeitet mit einer Genauigkeit von 5% und einer
  Hysterese von 1% von Fullrange.

- Fr U1600-Stationen gelten andere Zuordnungen:
  Der maximale H-Eingangspegel (ohne Hysterese) kann ungefhr im Bereich von
  3 Volt (Lo) und 5.5 Volt (Hi) eingestellt werden (typ. Angaben).

______________________________________________________________________________

PFAKTOR : Faktor zur Berechnung der Leistung aus der Energie pro Zeitspanne

Mit diesem Faktor kann der Zeitbezug der Leistungsberechnung angepat werden.
- Normalerweise wird der Stundenbezug benutzt (kWh zu kW) : Pfaktor = 3600
- Soll ein Sekundenbezug verwendet werden (Ws zu W) : Pfaktor = 1

Formel zur Berechnung der Leistung P aus Energie E und Zeitspanne dt:
        P = E * Pfaktor / dt

Aufruf: PFAKTOR <aufzhlung> [=<wert>]
Stack:  - >>> <wert>    (beim Lesen)
ext:    + - # . %

______________________________________________________________________________

! (PRINT)  : Ausgabe-Befehl

!       : Stack-Ausgabefunktion nimmt eine Zahl vom Stack und gibt diese aus.
! ...   : Ausgabefunktion        ! [<par1> [__<par2> [__<par3>]]] [=<zpar1>]
          Beispiel:  fix 3,5,! "Wert = " . " kg"    --->    Wert = 5.000 kg
!$      : Ausgabe der Ablage.
!? ...  : Stringvergleich (Argument <--> Ablage).
          Stack hier:  -  >>>  {1|0}   : Gleichheit= 1, Verschieden= 0
!_      : Ausgabe einer Linie von 78 Unterstrichen '_'
!!      : Ausgabefunktion "Eine Leerzeile"

- die auszugebenden Zeichenketten knnen Formatanweisungen "%..." hnlich der
  printf() Funktion in der Sprache 'C' enthalten, siehe PRINTFORMAT.
  Es gilt: Zeichenketten <par1> .. <par3> werden entsprechend interpretiert
  und nahtlos aneinander gefgt. Zuweisungs-Zeichenketten <zpar1> .. <zpar3>
  werden unverndert bernommen und ebenfalls nahtlos aneinander gefgt.
  Beispiel:
        ! \065 \066 \067=\068 "F e r t i g"     --->    ABC\068F e r t i g
- weitere Beispiele siehe PRINTBEISPIELE.
- mit Ext. * wird die gesamte Ausgabe zustzlich in die Ablage
  (max. 128 Zeichen) kopiert.
- Ext. '-' [Ausgabe unterdrcken] leitet gesamte Ausgabe in die Ablage um
- Ext. ? vergleicht "case-INsensitiv",  Ext. ?? "case-Sensitiv"

______________________________________________________________________________

Formatierung der Ausgabe:       ( hnlich Formatbefehlen bei printf() in 'C' )
=========================               %[-][0][<breite>][.<fix>]#
Befehl:     Ausgabe:                      |  |     |        |    |
%!        : Zahl (vom Stack holen)        |  |     |        |    Befehl
%x   %X   : Zahl in HEX ( " " )           |  |     |        Nachkommastellen
%$   %s   : Ablage                        |  |     Ausgabebreite (max.99)
%<b>c<Z>  : <b>-mal Zeichen <Z>           |  0 : fhrende Nullen
%<b>C     : <b>-mal Zeichen(vom Stack)    - : linksbndig
%%        : %
----------  weitere Optionen s. PRINTMODI,  Beispiele s. PRINTBEISPIELE.
----------  Einige Befehle mit Ext. % aufgerufen, formatieren die Ausgabe
            entsprechend des Format-Strings (1. Parameter). Dann bedeutet:
%g   %G   : Gerte-Kennung, %g : Buchstaben-Kennung 'A1', %G : Kennungszahl
%f        : Funktions-Benennung (bei EGes also 'EGes').
%k        : Kanal-Nummer.
%i        : Index (numerisch), bei ETag-3 also 3.
%w        : Hauptwert (numerisch) des Befehls (bei EGes also die Energie).
%e        : Einheiten-String des Befehls.
%n        : Namen-String des Befehls (Kanalname)

______________________________________________________________________________

Stack-Ausgaben / -Manipulationen bei der Ausgabe-Formatierung
==============
   %!           : n >>> - ; drucke n      %#            : n >>> n ; drucke n
   %<    %n<    : DROP [<n=breite>]       %>     %n>    : DUP [<n=breite>]
   %n^          : PICK                    %~            : SWAP
   %a0   %a63   : Inhalt (A n)  : mglich fr Variablen A(%a00) und B(%b00)
   %&ann        : A nn push+drucken       %&&ann        : A nn nur push
   %ai          : Inhalt (I)    : mglich fr I(%ai), J(%aj), K(%ak)

String-Ausgaben
===============
   %$    %s     : Ausgabe der Zwischenablage
   %P00  %p19   : Inhalt (P i)            %H00   %h19   : Inhalt (H i)
   %Q00  %Q19   : Inhalt (Q i)

- %@p %@h %@s %@$ : String wird als Formatstring verwendet (1 Verschachtelung)
- %$ mit Fixpunktangabe (zB: %.3$) : n Zeichen vom Stringanfang weglassen
- Kennungs-Angabe bei %p %h %a b%  :
        %p<kenn>:<num>          ! %pc2:17       (Inhalt von C2:P 17) oder
        %p:<kenn>:<num>         ! %p:d:5        (Inhalt von D:P 5);
  die 2. Mglichkeit ist bei folgender Konstellation wichtig:
        ! "%ai3:15"     -->  <inhalt_von_i>3:15
        ! "%a:i3:15"    -->  <inhalt_von_I3:A15>

Zeitausgaben
============
   %z..         : Zeitzahl vom Stack, Stack bleibt (n >>> n)
   %_z..        : letzter Zeitpunkt innerhalb der Formatierung (U1600: b.v.)
   %/z..        : VON Zeitpunkt
   %//z..       : BIS Zeitpunkt
   %///z..      : Uhrzeit
   %&..z        : push+drucken            %&&..z        : nur push
   %zz   %ZZ    : Zeit$ / Zeit-Datum$     %dd    %DD    : Datum$ / Datum-Zeit$
   %zh          : Stunde   (0..23)        %dt    %dT    : Tag  (Zahl / String)
   %zm          : Minute   (0..59)        %dm    %dM    : Monat(Zahl / String)
   %zs          : Sekunden (0..59)        %dj           : Jahr (90..99,0..78)
                                          %dJ           : Jahr (1990..2078)
   %dw          : Wochentag (1:Mo...7:So) %dW           : Wochentag (String)

- %DM,%DW erzwingen grogeschriebenen Namen, %dM,%dW belassen Schreibweise.
- %:ZZ (':' bei Strings) modifiziert bei Zeitzahl=0 die Ausgabe: (U1600: b.v.)
  0,! %ZZ       -->     "00:00:00 01.01.90"
  0,! %:ZZ      -->     "--:--:-- --.--.--"

______________________________________________________________________________

* Ausgabe von Stackdaten
    12, 34, ! "n1 = %04!, n2 = %.3!"    -->  n1 = 0034, n2 = 12.000
    1,2,3,4, ! "%3^%07.3! %>%!,%!"      -->  002.000 4,4
* Formatierung eines Ausgabe-Befehls (Kanal v1 = Heizraum)
    Eges% "%g:%f von %4n = %w %e" V1    -->  A:EGes von raum = 1234.12 kWh
    Eges% "%G:%f von %-4n = %.0w %e" V1 -->  1:EGes von Heiz = 1234 kWh
* Zeit-Ausgabe
    ! "Heute ist %///&dT, der %dt. %dM %dJ"
    -->  Heute ist Mittwoch, der 6. Mai 1998
* HEX-Ausgabe
    %x    : 43981,! 'In Hex: %05x'      -->  In Hex: 0abcd
    %X    : 1997, ! 'In HEX: %X'        -->  In HEX: 7CD

______________________________________________________________________________

POWERFAIL (PWR) : Liste der Hilfsenergie-Unterbrechungen (max. 32 Eintrge)
---------------
Aufruf  :  POWERFAIL <aufzhlung> [=0]
Ausgabe :  ja
Stack   :  - >>> -
Ext.    :  + - # . / * %
           | @ (siehe unten)

- Liste aller Unterbrechungen:  PWR *
  (beginnend mit dem zuerst aufgetretenen Power Fail)
- umgekehrte Ausgabereihenfolge mit Ext. '*':  PWR* *
- Lschen z.B. ab Index 7:  PWR 7=0
- VON und BIS der zuletzt gelisteten Unterbrechung werden stets
 (auch ohne Ext. '/') gesetzt.
- Dauer der zuletzt gelisteten Unterbrechung [s]:  PWR-,DAU,!
- Formatierung: %w entspricht der jeweiligen Unterbrechungsdauer [s],
  %e der Einheit "s" (U1600: b.v.)

POWERFAIL| : wie POWERFAIL, Gesamtausfalldauer --> Stack (U1600: b.v.)
----------
Aufruf  :  POWERFAIL| <aufzhlung> [=0]
Ausgabe :  ja
Stack   :  - >>> <summe_der_ausfallzeiten>
Ext.    :  + - # . / * %

POWERFAIL@ (PWR@) : gibt Intervall <PowerON>..<jetzt> an [siehe auch POWERON]
-----------------
Aufruf  : POWERFAIL@
Ausgabe : ja
Stack   : - >>> -
Ext.    : + - # . / | %

- Ermittlung der Einschaltdauer [s] seit PowerOn:  PWR@-,DAU,!
  (siehe hierzu auch POWERON)

______________________________________________________________________________

POWERON (PWRO) : Betriebsdauer seit dem letzten PowerOn oder Reset

Aufruf  :  POWERON
Ausgabe :  ja
Ablage  :  Zeitdauerangabe
Stack   :  -  >>>  <dauer_in_Sekunden>
Ext.    :  + - # . / $  %

- VON und BIS werden stets (auch ohne Ext. '/') gesetzt.

______________________________________________________________________________

REG-D / PAN-D spezifische Befehle
=================================
Diese Befehlsgruppe beginnt stets mit REG... (Kurzform RG...)
Allgemeine Form:        REGxxxxxxxxx [<aufzhlung>] [= <wert>]
Ausgabe:                ja (auer bei Ext. '-' oder entsprechendem Hinweis)
Stack (Lesen):          - >>> <rckgabewert>
Stack (Schreiben):      - >>> -
Ext.:                   - + % # . & $
modifzierende Ext.:     * _   (bei entsprechendem Hinweis)

- Die Befehlsausgabe ist rckschreibbar (sofern der entsprechende Befehl eine
  Zuweisung erlaubt).
- Untersttzt der Befehl eine <aufzhlung>, so ist der <rckgabewert> stets
  die Summe aus allen Rckgabewerten der <aufzhlung>.
- Weitere Gruppen: MMUxxxxxxxxx, ESPxxxxxxxxx

______________________________________________________________________________

RELAIS (REL)        :  Relais-Ausgnge schalten.
=====================  '1': aktives Relais, '0': nicht aktives Relais.
Aufruf  :  REL <aufzhlung> [= {1|0}]
Ausgabe :  ja
Stack   :  -  >>>  {1|0}   (beim Lesen)
Ext.    :  + - . # * $ % @

S0RELAIS (S0REL)    :  S0-Relais (Halbleiter-Relais) Ausgnge schalten
=====================                                    (U1600: b.v.)
Aufruf  :  S0REL <aufzhlung> [= {1|0}]
Ausgabe :  ja
Stack   :  -  >>>  {1|0}   (beim Lesen)
Ext.    :  + - . # * $ % @


RELAISMODE (RELM)   :   Betriebsmode der Relais-Ausgnge festlegen:
=====================   0 : Relais stets AUSgeschaltet
                        1 : Relais stets EINgeschaltet
                        2 : Relais per Programm steuerbar (Default)
Aufruf  : RELM <aufzhlung> [= <mode>]
Ausgabe :  ja
Stack   : -  >>>  <mode>   (beim Lesen)
Ext.    : + - . # * %

- Ext. * unterdrckt stets den optionalen Relaisnamen (s. RELAISNAME).
- Ext. @ bei REL (REL@ <aufzhlung>) gibt den tatschlichen Relaiszustand an,
  bercksichtig also berreitungen mit RELAISMODE.
- Statt <aufzhlung> kann auch der Name eines Relais (s. RELAISNAME, FINDER)
  angegeben werden. S0RELAIS verhlt sich dann wie RELAIS.
- Die Stationen sind wie folgt bestckt:
  U1600 : 4 Relais-Ausgnge (Wechsler) REL 1..4
  U1601 : 2 Relais-Ausgnge (Wechsler) REL 1..2,
          4 Halbleiter-Relais-Ausgnge (Arbeitskontakt) REL 3..6
          (S1 <--> REL 3, S2 <--> REL 4, S3 <--> REL 5, S4 <--> REL 6)
  U1615 : max. 7 Relais-Ausgnge (Arbeitskontakt) REL 1..7 (siehe ANARELMAP)
  REG-D : REL 1..6      (entspricht RegREL 1..6)
  PAN-D : REL 1..14     (entspricht RegREL 1..14)
- Mit S0REL lassen sich die Halbleiter-Relais-Ausgnge (sofern vorhanden)
  direkt steuern. Bei U1601 gilt: S0REL 1  entspricht  REL 3, bei Gerten
  ohne dedizierte S0-Relais gilt: S0REL 1  entspricht  REL 1.
  Mode- und Namen-Einstellung mssen mit RELAISMODE / RELAISNAME erfolgen,
  die Relaisnummer ist dann entsprechend zu korrigieren.
  Pulsausgabe ab ECSys V2.47 siehe S0PULS.
- Bei REG-D und PAN-D gilt stets RELAISMODE == 2. Somit liefert RELAIS <n>
  den gleichen Wert wie RELAIS@ <n>. Die Einstellung der Relais-Funktion
  erfolgt mit dem Befehl RegRELFU.
- Im STATUS erscheint:
        'p' : per Programm AUS     'P' : per Programm EIN
        '_' : stets AUS (Mode 0)   '+' : stets EIN (Mode 1)
        '-' : AUS                  '*' : EIN

______________________________________________________________________________

RELAISNAME (RELN) : Name eines Relais. Jedem Relais kann ein Name zur besseren
                    Identifikation zugeordnet werden.

Aufruf  :  RELN <aufzhlung> [= <name>]
Stack   :  -  >>>  -
Ext.    :    + - . # %

- Lnge von <name> = 8 Zeichen.
- Der Name ist besonders ntzlich bei Verwendung der Suchfunktion (s. FINDER).
- Lschen eines nicht verwendeten Namens (von Relais 2):  RELN 2 = ""

______________________________________________________________________________

S0Pxxxx Befehle zur Pulsausgabe auf S0-Relais:                  (ab 03/2002)
----------------------------------------------
                                        // <s0rel> : 1..4
        S0PCH <s0rel> [=<chan>]         // Eges-Kanal als Basis (0=aus, 1..64)
        S0PDElta <s0rel> [=<delta>]     // deltaE pro Puls (0=aus) entsprechend
                                        // der Eeinheit von <chan>
        S0PMS <s0rel> [=<pulsdauer_ms>] // Pulsdauer in Millisekunden (0..1000)
                                        // Werte < 20ms --> 20ms
                                        // minimale Periodendauer = 2 * S0PMS
        S0PULSe <s0rel> [<periodendauer_ms>] = <pulsanzahl>
                                        // Ausgabe von <pulsanzahl> Pulsen mit
                                        // entsprechender Periodendauer unab-
                                        // hngig von S0PCH und/oder S0PDElta
                                        // Werten. S0PMS wird beachtet.
                                        // <periodendauer_ms> : nicht angegeben
                                        // oder < 20ms  -->  2 * S0PMS
- Kleine Buchstaben im Befehlsnamen sind optional, S0PULS und S0PULSE sind
  also gleichwertige Namen fr den selben Befehl.
- Intern wird ein Eges-Vergleichsregister gefhrt, das mit dem
  zu Testzwecken implementierten Befehl S0PEGES <s0rel> gelesen werden kann.
  Wird eine Energiedifferenz von umgerechnet mehr als 250 Pulsen
  erzielt, wird diese Differenz genullt (S0PEGES=EGES) und keine Pulse
  ausgegeben.
  Ansonsten wird die Anzahl der auszugebenden Pulse anhand der Energiedifferenz
  berechnet und das Eges-Vergleichsregister S0PEGES entsprechend angepasst.
  Pulsanzahl = Int(EGES-S0PEGES / S0PDElta)
  Die Vergleichsbildung findet mehrfach pro Sekunden statt.
- Bitte beachten:
  S0PDELTA ist reziprok zu ZKONST  (Annahme: EEinheit = kWh, URAT = IRAT = 1)
    ZKONST      : <zkonst> Impulse pro kWh
    S0PDELTA    : <s0pdelta> kWh pro Impuls
- S0PDElta kann auch negativ sein und damit auf negative Differenzen reagieren,
  um so z.B. nicht den Bezug sondern die Abgabe zu zhlen.
- Leistungsinformation in der Pulsausgabe:
  Durch ein spezielles Verfahren kann aus der Pulsausgabe wieder auf die
  Leistung geschlossen werden. Wenn mehr als ein Puls auszugeben ist, werden
  also keine "Pulsetrains" ausgegeben, sondern der Pulsabstand wird bei der
  Differenzbildung aus der aktuellen PMOM berechnet (bei Kanlen mit PMOM=0
  werden dann dennoch Pulsetrains erzeugt).
  Werden pltzliche Delta-Peaks erfasst, so wird der aktuelle Pulsabstand
  entsprechend gekrzt, damit schnell auf die neue PMOM-Situation eingegangen
  werden kann.
  Wenn nach einer Vergleichsbildung ein oder mehrere Pulse auszugeben sind, und
  noch Pulse aus der letzten Vergleichsbildung ausstehen (insgesamt n Pulse),
  so werden diese n Pulse genau dann gleichmssig auf 10s aufgeteilt, wenn
  gilt: n * Periodendauer > 10s (Periodendauer berechnet aus hchster PMOM
  der angesammelten Pulse).
  Die Genauigkeit der aus dem Pulsabstand zu gewinnenden Leistung hngt von
  mehreren Faktoren ab: Frequenz der Pulsausgabe, Kanalmode (Zhlimpulse,
  P->E Wandlung), Intervall einer u.U. verketteten DVIRT-Bildung (Zykluszeit
  der H-Programme), usw. Trotz einer mglichst realittsnahen Leistungsab-
  bildung sollte der Leistungswert nur als Richtwert gesehen werden, der
  Energiewert jedoch ist (nahezu) fehlerfrei (64-Bit double Rechengenauigkeit,
  Zeitverzgerungen und Impulsverluste durch Hilfsenergieunterbrechungen
  mglich.
- Default-Werte: S0PCH 1..4 = 0, S0PDE 1..4=0, S0PMS 1..4=0, S0PEGES 1..4=0
- Beispiel:
  Kanal 1 zhlt Impulse mit 1 Impuls pro kWh. EGES von Kanal 1 dient als Basis
  zur Impulsausgabe auf dem S0-Relais 1 (1 kWh pro Impuls). Dieses wird ber
  den 24V-Ausgang dem Kanal 2 zugefhrt. Registerinhalte der hier nicht
  genannten Register entsprechen den Default-Werten.
        KMODE 1+2 = 3 P->E, ZKONST 1+2 = 1, PULS 1+2 = 10 ms
        S0PCH 1 = 1, S0PDELTA = 1 kWh, S0PMS = 20 ms
  Startzustand (nur zu Testzwecken!) einnehmen:
        StartStop 1+2 = 0, EGES 1+2 = 0, S0PEGES 1 = 0, StartStop 1+2 = 1
  Alle Zhlimpulse auf Kanal 1 werden nun ber das S0-Relais 1 ausgegeben und
  von Kanal 2 gezhlt (max. Frequenz 25 Hz). Die von Kanal 2 gemessene PMOM
  entspricht im oben genannten Rahmen der PMOM von Kanal 1.

______________________________________________________________________________

REM (@) : Bemerkung einfgen

Beispiel:       REM "Mittelwert Programm"
                @ Oberwert-Ermittlung
                REM eins zwei drei              (je <par> eine Zeichenkette)

- Beginnt eine Zeile mit '#' (erstes NICHT-Leerzeichen), so wird diese Zeile
  komplett ignoriert. H-Programme knnen damit recht einfach unwirksam ge-
  schaltet werden, ohne den Inhalt lschen zu mssen. Um einen optimalen
  Durchsatz zu erzielen, sollte das ERSTE Zeichen in dem entsprechenden
  H-Programm auf '#' gesetzt werden.

========= Aufruf eines P-Programmes mit freidefinierbarem Namen ==============
  Ist der 1. Befehl eines P-Programms eine spezielle Bemerkung "@@ prog_name",
  so kann dieses Programm einfach durch Eingabe von  prog_name  statt  P n
  aufgerufen werden, egal wo es im ECS-LAN abgelegt ist.
Beispiel:
  P 10 = '@@ Hallo, ! "Hallo, wie geht es Ihnen?"'
  hallo   -->   Hallo, wie geht es Ihnen?                          [Aufrufen ]
  hallo&  -->   A:P 10 = '@@ Hallo, ! "Hallo, wie geht es Ihnen?"' [Editieren]

LPSEARCH    : Limited P Search, Einschrnkung der systemweiten Programmsuche
============  (ab 12/2001)
Aufruf:
  LPSEARCH = 0  // Sucht zuerst auf Station mit akt. Adresse, danach auf allen
                // anderen Stationen im LAN (beginnend von A:..Z4:). DEFAULT.
  LPSEARCH = 1  // Sucht zuerst auf Station mit akt. Adresse, danach auf der
                // Prompt-Station(ZZ:), schlielich auf der RS232-Station(AA:).
Ausgabe :  ja
Stack   :  - >>> <lpsearch>

- In groen Netzen ist eine Einschrnkung der systemweiten Programmsuche mit
  LPSEARCH = 1 sehr ntzlich, denn falsch geschriebene Befehle fhren hier zu
  langen Wartezeiten.

______________________________________________________________________________

setKENNUNG (setKENN) : Einstellen der Kennung

Aufruf  :       setKENN = {A, A1..A9, .. Z, Z1..Z4}:
Beispiel:       setKENN=U1:

- weitere Infos zu Kennungen bei KENNUNG und KENN.

______________________________________________________________________________

SPRACHE :  whlt die Bedienpanel-Dialog Sprache
=========
Aufruf  :  SPRACHE [=<land>]
Ausgabe :  ja
Ablage  :  ja
Stack   :  - >>> -
Ext.    :  + - # . $ | %

<land>  :  1  |  D   |  Deutsch  |  G  |  German
           2  |  E   |  Englisch
           3  |  S   |  Spanisch  |  ES  |  ESpangnole
           4  |  I   |  Italienisch
           5  |  F   |  Franzoesisch
           6  |  N   |  Niederlndisch
           7  |  CZ  |  Czech (Tschechisch)

- die Verfgbarkeit der Sprachen ist vom Stand der Firmware abhngig.
- der ECL-Interpreter ist nur zweisprachig (Deutsch/Englisch) ausgelegt.
  Deutsche oder englische Befehle sind beliebig mischbar, fr die Ausgabe-
  Sprache gilt jedoch: Deutsch bei <land> == 1, Englisch bei <land> >= 2
- nur der erste Buchstabe von <land> mu angegeben werden, Gro-/Klein-
  schreibung unwichtig.
- Ext. '|' pusht beim Lesen den aktuellen Sprachindex auf den Stack.
  SPRACHE|  :  - >>> <land_zahl>                                (U1600: b.v.)
- LISTSPRACHE erzeugt eine Liste aller verfgbaren Sprachen     (U1600: n.v.)

- Deutsch whlen:       SPRACHE = Deutsch       oder    SPRACHE = 1
- Englisch whlen:      SPRACHE = Englisch      oder    SPRACHE = 2


DATUMFORMAT (DATUMFOR) : whlt das Datumsformat fr alle Datumsausgaben
======================
Aufruf  :  DATUMFORMAT [=<dformat>]
Ausgabe :  ja
Ablage  :  ja
Stack   :  - >>> -
Ext.    :  + - # . $ | %
                                        Befehle mit Datumsausgabe: bergehen
- mgliche Werte fr <dformat>:         des aktuellen Formats mit Ext. ~
    tt.mm.jj (dd.mm.yy) (1) -->  31.12.93  :  ~
    mm/tt/jj (mm/dd/yy) (2) -->  12/31/93  :  ~~
    mm-tt-jj (mm-dd-yy) (3) -->  12-31-93  :  ~~~
- nur die ersten 2-3 Zeichen mssen angegeben werden {tt mm/ mm-}.
- Ext. '|' pusht beim Lesen den aktuellen Format-Index auf den Stack.
  DATUMFOR|  :  - >>> <format_index>                            (U1600: b.v.)
- LISTDATUMFORMAT erzeugt eine Liste aller verfgbaren Formate  (U1600: n.v.)

______________________________________________________________________________

SQRT SIN COS ASIN ACOS DEG RAD EXP LOG  :  Mathematische Funktionen

          Stack:
SQRT :  x  >>>  Quadratwurzel(x)
SIN  :  x  >>>  sin(x)          Basis ist Bogenma
COS  :  x  >>>  cos(x)
ASIN :  x  >>>  asin(x)         Umkehrfunktion von SIN
ACOS :  x  >>>  acos(x)
DEG  :  x  >>>  ((x/pi)*180)    Umwandlung Bogenma in Grad
RAD  :  x  >>>  ((x/180)*pi)    Umwandlung Grad in Bogenma
EXP  :  x  >>>  (e hoch x)
LOG  :  x  >>>  LOGe(x)
LOG10:  x  >>>  LOG10(x)

PI   :  -  >>>  pi              3.141592653589793

______________________________________________________________________________

STATION :  Stationsname
DEVICE  :  Gertename == Stationsname

GRUPPE  :  optionaler Gruppenname (nicht ber Bedienpanel verfgbar)

Aufruf  :  STATION [=<name>]
Ausgabe :  ja
Ablage  :  <name>
Stack   :  - >>> -
Ext.    :  + - # %

- Beim Lesen: <name> --> Zwischenablage (auer bei Ext."--")
- maximale Lnge von <name> = 8 Zeichen.
- Zeichenvorrat siehe KANAL.

______________________________________________________________________________

STATUS (STAT)...:  Ausgabe einiger Gerte-Statusmeldungen
        Aufruf  :  STATUS
        Ausgabe :  ja
        Stack   :  -  >>>  -
        Ext.    :  + $ ##

STAT24V.........:  Status der 24V-Ausgangsspannung
        Aufruf  :  STAT24V
        Ausgabe :  nein
        Stack   :  -  >>>  {1|0}        1: OK, 0: Fehler

STATBAT.........:  Status der Lithium-Speichersttzbatterie
        Aufruf  :  STATBAT
        Ausgabe :  nein
        Stack   :  -  >>>  {1|0}        1: OK, 0: Fehler

STATREL.........:  Zustand des Status-Relais
        Aufruf  :  STATREL
        Ausgabe :  nein
        Stack   :  -  >>>  {1|0}        1: OK (Relais EIN), 0: Fehler (AUS)

STATREL*........:  Status-Relais fr 10s abfallen lassen (AUS)
        Aufruf  :  STATREL* = 0         Status-Relais bleibt 10s ausgeschaltet
        Aufruf  :  STATREL* = 1         Status-Relais wieder aktivieren

STATCHECK.......:  Einstellen/Abfragen der Kopplung Gertestatus-Relais mit
                   dem Status der 24V-Ausgangsspannung, der Lithium-Bat. usw.
        Aufruf  :  STATCHECK [=<wert>]
        Ausgabe :  ja
        Stack   :  -  >>>  <wert>       0 : NICHT gekoppelt,
        Ext.    :  + - %                1 : gekoppelt (Default)
- Die folgenden Kopplungen sind mit STATCHECK einstellbar:
  0 : keine Kopplung, nur system-interne Funktionsbereitschaft (Sys)
  1 : Sys + Lithium-Batterie_ok (Bat) + 24V-Ausgangsspannung_ok (24V)
- Sobald eine der Bedingungen nicht erfllt ist, fllt das Status-Relais ab
  und die Status-LED verlischt.
- Auch ohne Kopplung mit STATCHECK kann die Station mit dem Befehl ERRSTAT
  berprft werden. Die einzelnen Fehler knnen entsprechend maskiert werden
  und per Hintergrund-Programm das Status-Relais und die Status-LED mit dem
  Befehl STATREL* =0 manipuliert werden.

______________________________________________________________________________

SOWI    : Untersttzung zur Umstellung auf Sommerzeit (Sommer <-> Winter).
          SOWI darf nur in einem einzigen H-Programm verwendet werden, eine
          Umstellung kann nur dann erfolgen, wenn die Station zum Zeitpunkt
          der Zeitumstellung eingeschaltet ist.
          Wenn keine Parameter angegeben werden, wird Monat Mrz und Oktober
          zur Umstellung verwendet, jeweils der letzte Sonntag um 2h/3h.
          Ein internes Flag verhindert mehrfache Umstellungen.
Aufruf  : SOWI [<WiSo_monat> [<SoWi_monat>]]
Stack   : - >>> <offset> <tu_es>                <offset> : 0, 3600, -3600
                                                <tu_es>  : 1=Wechsel, 0=nichts
Beispiel:
        H18 = 'SOWI, IF, ZEIT-, +, ZEIT=.'
oder fr alle Stationen:
        H18 = 'SOWI, IF, ZEIT-, +, ZEIT=., ALL-, ZEIT = x:x:x'

- im letzten Fall drfen in den anderen Stationen keine H-Programme
  zur Zeitumstellung laufen!

______________________________________________________________________________

SYNC    :  Erzeugen einer Intervallgrenze, oder
           Abfrage des Intervall-Status.

Aufruf  :  SYNC =       : das laufende Intervall wird abgeschlossen,
Stack   :  - >>> -        Voraussetzung: INTERVALLQUELLE == PROG
Ext.    :  +            : das laufende Intervall wird abgeschlossen,
                          unabhngig von Intervallquellen-Einstellung !
Aufruf  :  SYNC         : Abfragen, ob Intervallgrenze erreicht wurde:
Ausgabe :  nein
Stack   :  - >>> <SyncFlag>
                        <SyncFlag> == 2 : Sync-Anforderung luft gerade (<1s)
                        <SyncFlag> == 1 : fr 5s nach Intervallgrenze (s.u.)
                        <SyncFlag> == 0 : sonst
Aufruf  :  SYNC*
Ausgabe :  nein
Stack   :  - >>> <Anzahl-Intervalle-seit-PowerON>       (max.255)

Aufruf  :  SYNC**
Ausgabe :  nein
Stack   :  - >>> <Gesamte-Anzahl-Intervalle>            (max.65535)

Aufruf  :  SYNC/
Ausgabe :  nein
Stack   :  - >>> <laufende-Intervalldauer-in-Sekunden>

- VON und BIS werden stets entsprechend des laufenden Intervalls gesetzt.
- Bei Intervall-Dauer <= 5s gilt:
  <SyncFlag> == 2 : Sync-Anforderung luft (<1s)
  <SyncFlag> == 1 : sonst

______________________________________________________________________________

Interne System-Funktionen
=========================

SysRESET........:  Prozessor-Reset durchfhren   (entspricht PowerOn Reset)
Aufruf          :  SysRESET = 0

SysTEST.........:  Test einiger Systemfunktionen, Ausgabe des Resultats
Aufruf          :  SysTEST [<anzahl>] [=0]
Ausgabe         :  ja
                         lokale Station:   Kennungs-Station:
Stack           :  - >>>                   ESCC2-L  ESCC2-R
Stack (Ext.@)   :  - >>> TxRep-L  TxRep-R  TxRep-L  TxRep-R   bytes/s dauer
Stack (Ext.@@)  :  - >>> dTxRep-L dTxRep-R dTxRep-L dTxRep-R  bytes/s dauer
Ext.            :  + - .. $ @ @@

ECS-LAN Test
============
- mit SYSTEST <Anzahl> kann das ECS-LAN berprft werden.
  64 Nutzdatenbytes werden <anzahl> mal zu Testzwecken mit der angesprochenen
  Station (Kennungs-Station) ausgetauscht (32 Byte hin, 32 Byte zurck).
  Ist ansonsten kein ECS-LAN Verkehr, entspricht die gemessene Datenrate
  der Gte der bertragungsstrecke.

Beispiel:
  <A>  B:systest 100
  6400 Bytes werden zwischen Station A: und B: ausgetauscht, der Zeitbedarf
  und die Datenrate werden anschlieend ausgegeben.

WICHTIG:
  Pro ECS-LAN Segment zwischen Prfer und Prfling vermindert sich
  die Datenrate (Zeitbedarf * n). RICHTWERTE (n=1, 62K5 Bd):
        U1600           : 2000..2500 Byte/s
        U1610/15        : 2500..3000 Byte/s
        U1601/REG-D     : 3000..3500 Byte/s

______________________________________________________________________________

TARIF   : Abfrage oder Einstellen des aktuellen Tarifs

Aufruf  : TARIF [=<tarif>]
Ausgabe : ja
Stack   : - >>> <tarif>
Ext.    : + - % *

- <tarif> = {1|2}; '1': Tarif 1, '2': Tarif 2
- Mit der Ext. '*' gilt <tarif> = {0|1}; '0': Tarif 1, '1': Tarif 2.
  Beispiele (mit Ext. '*'):
  1. Zwischen 22h00 und 6h00 gilt Tarif T2, sonst T1:
     H 10= 'hh,6,<,hh,22,>,|,tarif* =.'
  2. Am Wochenende (Sa.+So.) soll T2 gelten:
     H 10= 'wtag,6,>=,tarif* =.'

______________________________________________________________________________

TASTE (TT)  :  bergabe von Tastendrcken an das Bedien-Panel
=============================================================
Aufruf  : TASTE <tastenkrzelkette>
Ausgabe : keine
Stack   : - >>> -

Elemente der <tastenkrzelkette>, maximale Lnge 20 Elemente:
   1 .. 5 : F1 .. F5
        + : Pfeil hoch
        - : Pfeil runter
        < : Pfeil links
        > : Pfeil rechts
        m : Men
        s : Setup       (wie "Men-Taste 1s drcken")
        # : Enter
        ! : ESC
        a : AUTO        (nur REG-D)
        h : HAND        (nur REG-D)
        r : LR          (nur REG-D "LOCALREMOTE")
        t : ACK         (nur PAN-D "TEST/ACKnowledge")

        q : ESC-ESC (alle Ebenen zurckfallen, U1600/10/15 n.v.)
        u : Umschalten (nur U1600, wie Pfeil hoch+runter gleichzeitig drcken)
        l : Lschmen oder hnliche Funktion
        x : Setzen des Grundzustandes (Normalanzeige mit Eges, Kanal 1)

Beispiel  : TASTE x++++4
  'x' setzt Bedienpanel auf Normalanzeige, viermal '+' geht auf Kanal 5,
  '4' steht fr F4, also Wechsel zur Pmom.


LOCKKB, LOCKKBM : Sperren der Tastatur (auch selektiv)          (U1600: n.v.)
======================================================
Die gesamte Tastatur oder nur bestimmte Tasten knnen auf Timeoutbasis
gesperrt, d.h. der Sperrbefehl ist nur eine bestimmte Zeitdauer gltig,
danach wird die Sperre sicherheitshalber wieder aufgehoben. Verwendet
werden die Befehle vorwiegend in H-Programmen.

LOCKKB : Sperre der kompletten Tastatur
---------------------------------------
Aufruf  :  LOCKKB [= <sperr_dauer>]             <sperr_dauer>
Ausgabe :  ja                                   0    : Sperre aufheben
Stack   :  - >>> <verbleibende_sperr_dauer>     1    : 5s sperren
                                                2..60: Sperrdauer in [s]
- Wird trotz Sperre eine Taste gedrckt, erscheint kurzzeitig die Meldung
  "TASTATUR GESPERRT" im Display.

LOCKKBM : Selektives Sperren der Tastatur (mit Tastenmaske) fr 60s
-------------------------------------------------------------------
Aufruf  :  LOCKKBM [= <sperrmaske>]
Ausgabe :  ja
Stack   :  - >>> <sperrmaske>

<sperrmaske> :  Taste   Bit     Taste   Bit     Taste   Bit
                -------------------------------------------
                F1      0       LINKS   8       SETUP   16
                F2      1       ENTER   9       LOESCH  17
                F3      2       MENU    10      X       18
                F4      3       ESC     11      ESCESC  19
                F5      4       AUTO    12      ACK     20
                AUF     5       HAND    13      -
                AB      6       LR      14      -
                RECHTS  7       <meld>  15      -

- Bitpositionen: (MSB)Bit-31 .. Bit-0(LSB)
- Bitwert:  1=Taste gesperrt, 0=Taste mglich;
  Bei <meld> gilt  1="TASTATUR GESPERRT"-Meldung erscheint, 0=keine Meldung.
- Masken knnen in binrer Schreibweise ("0b" voranstellen) verstndlich
  formuliert werden.
  Beispiel: Sperren der Tasten AUF + AB, Meldung bei Verwendung dieser Tasten:
        LOCKKBM = 0b1000000001100000    oder
        LOCKKBM = 32864

______________________________________________________________________________

TX1     :  Senden einer Zeichenkette an COM1 (bei COM2-MIX an COM2).
           Aufruf:      TX1 <zeichenkette>
TX2     :  Senden einer Zeichenkette an COM2.
           Aufruf:      TX2 <zeichenkette>

- Die Zeichenkette kann bis zu 127 Zeichen lang sein.
- Befehlsausgabe senden (verwendet den Zwischenpuffer):
        EGES-- 1, TX2 $
- Die Zeichenkette kann auch an eine andere Station gesendet werden.

______________________________________________________________________________

ZKONST  Urat  Irat  PULS  FLANKE
EINAUS  STARTSTOP (STSP)  KFIX  KFAKTOR (KFAK) : kanalspezifische Parameter

ZKONST:         Die Zhlerkonstante <real>
Urat:           Spannungsbersetzungsverhltnis <real>
Irat:           Strombersetzungsverhltnis <real>
PULS:           Pulsdauer in Millisekunden (10..2550 == 0,01s..2.55s)
FLANKE:         aktive Zhlflanke oder Tarifzuordnung (Binreingang):
                1: __-- Wechsel 0V >>> 24V (+)  oder  24V --> Tarif 2
                0: --__ Wechsel 24V >>> 0V (-)  oder  24V --> Tarif 1
EINAUS:         Kanal ein-/ausschalten. 1: EIN, 0: AUS. Die Auswahl * bei
                Aufzhlungen bercksichtigt nur eingeschaltete Kanle.
STARTSTOP:      Impulszhlung des Kanals steuern:  1: START, 0: STOP
KFIX:           FIX-Punkt bei Ausgabe (0: 0, 1: 0.0, 2: 0.00 oder 3: 0.000)
KFAKTOR:        allgemeiner Faktor fr Energie und Leistung     (U1600: n.v.)

Aufruf  :  ZKONST <aufzhlung> [=<zuweisung>]
Ausgabe :  ja
Stack   :  - >>> wert  (beim Lesen)
Ext.    :  + - . # %

______________________________________________________________________________

VER     : Ausgabe der aktuellen Software-Version
========
Aufruf  : VER
Ausgabe : ja
Stack   : -  >>>  <Versions-Nummer>
Ext     : + - . $ # %

LVER    : Ausgabe der aktuellen ECS-LAN-Version zur Feststellung des
========  ECL-Befehlumfangs des adressierten ECS-LAN Teilnehmers (ab 12/2001)
Aufruf  : LVER
          VER@          (alternative, stets verfgbare Befehlsform)
Ausgabe : ja
Stack   : -  >>>  <Lan-Code> <Lan-Versions-Nummer>
          -  >>>  <Lan-Versions-Nummer> <Lan-Code>      (bei Ext. '|')
Ext     : + - . $ # % |

- Beispiel fr Ext.'|', die lediglich die Stackreihenfolge umkehrt:
  Es soll Code nur ab LanVersion >= 2 ausgefhrt werden und es nicht bekannt,
  ob die Firmware den Befehl LVER berhaupt kennt:
        VER@|-,dr,2,>=,if, ....         // fhrt ... nur ab LV 2 aus
        VER@|-,dr, !                    // Stackausgabe: LV oder 0

______________________________________________________________________________

VSUM VIRT    :  Beschreibungs-Funktionen zur Bildung von virtuellen Kanlen
                in Hintergrund-Programmen mit absoluten Summen.

- Dieses Funktionspaar ist nur bei U1600/10/15 Station verfgbar.
- Bildung von virtuellen Kanlen in Hintergrund-Programmen mit
  differenzieller Summenbildung (lose Kopplung) : siehe DVSUM / DVIRT

______________________________________________________________________________

VON   BIS       : Abfragen der Zeitzahl der letzten Ausgabe "mit Zeit"
DAUER (DAU)     : Dauer der Zeitspanne VON..BIS in Sekunden

Aufruf  : VON
Ausgabe : nein
Stack   : - >>> <zeitzahl>        <zeitzahl> : Sekundenanzahl ab 1.1.1990

- Die beiden Variablen VON und BIS werden gesetzt, sobald ein entsprechender
  Befehl mit Extension / oder ^ verwendet wird. Mit DAUER lt sich die Dauer
  der durch VON..BIS beschriebenen Zeitspanne in Sekunden ermitteln.

Formatierungsmglichkeiten der Zeit-/Datum-Angabe bei der Ausgabe mit Zeit
==========================================================================
Verwendung der Extension '/' und '^' :
 /      :  ^        : Ausgabe mit Zeit "bis"
 //     :  ^^       : Ausgabe mit Zeit "von--bis"
 ///    :  ^^^      : Ausgabe mit Zeit "von"
 ////   :  ^^^^     : Ausgabe unterdrcken (VON und BIS werden jedoch gesetzt)

Modifizieren der durch / oder // oder /// definierten Ausgabe (/ stets vor ^):
 /^     : Zeit/Datum anstatt Datum/Zeit Ausgabe              31.12.93;17:33:56
 /^^    : Datum/Zeitausgabe, Datum im DBase-Format jjjjmmtt  19931231;17:33:56
 /^^^   : Zeit/Datumausgabe, Datum im DBase-Format jjjjmmtt  17:33:56;19931231
 /^^^^  : Datum/Zeit Sep.';' --> ' ' (geeignet fr MS-EXCEL) 31.12.93 17:33:56
 /^^^^^ : Zeit/Datum Sep.';' --> ' ' (  "       "       "  ) 17:33:56 31.12.93

______________________________________________________________________________

ZEIT (TIME)   DATUM (DATE)  :   Systemzeit und Datum stellen oder abrufen:

          Stellen:               Abfragen:              Zeitzahl darstellen:
Aufruf  : ZEIT = <zeitstring>    ZEIT                   ZEIT .
Ausgabe : nein                   ja :  hh:mm:ss         ja : hh:mm:ss
Stack   : - >>> -                - >>> <zeitzahl>       <zeitzahl> >>> -
Ext.    : + - * . / ^ _ %

- <zeitzahl> ist die Sekundenanzahl ab dem 1.1.1990
- Format des <zeitstring>:  12:36:00 oder 2h15
- Format des <datumstring>: 17.03.92 oder 26.02   [Datumformate s.DATUMFORMAT]
- Mit  ZEIT//=30.11 11h  wird Zeit/Datum oder Datum/Zeit zusammen gestellt.
- ZEIT//  gibt Zeit und Datum aus :  hh:mm:ss tt.mm.jj
- DATUM// gibt Datum und Zeit aus :  tt.mm.jj hh:mm:ss
- Zeitvergleiche siehe ZEITVERGLEICHE.      Sommerzeit-Umschaltung siehe SOWI.
- ZEIT* pusht (<zeitzahl>.<sekbruchteil>)   Funkuhr-Synchronisation s. DCF77.
- Ext. '^' verndert die Reihenfolge Zeit/Datum und/oder whlt ein dBase-
  kompatibles Datumformat. DATE/^^  -->  19980427       [siehe auch VON]
- Ext. '_'  :  statt der Echtzeit wird die Betriebsdauerzhler-Zeit verwendet.
  Siehe ZEITVERGLEICHE.

! Bitte beachten Sie, dass nur Zeitabfragen mit dem Befehl ZEIT oder DATUM
  die tatschliche Zeit / Betriebsdauerzhler-Zeit der angesprochenen Station
  lieferen. Alle anderen Zeitbefehle beziehen sich auf die Station, auf der
  der Befehl physikalisch ausgefhrt wird (so als wenn stets die Kennung AA:
  dem Befehl vorangestellt wrde).

--------
TM / TMD        : Zeitmessungen
    'tm,  <Block> , tmd,!'      gibt Dauer von <Block> aus, Stack mu passen!
    'a=t, <Block> ,a,tmd,!'     "       "     " " , Stack unwichtig.
    Zeitangabe in Sekunden mit 1/100s.

______________________________________________________________________________

Vergleiche mit der Systemzeit
=============================
Aufruf  :  IF <datum_oder_zeitstring> [<zeitstring>]
           IFF <datum_oder_zeitstring> [<zeitstring>]
Stack   :  - >>> -

- Da die Zeitpunkt-Angabe auch Platzhalter "x" enthalten darf, kann ein
  ganzer Zeitbereich aufgespannt werden (siehe Beispiel).
- Bei Verwendung von IF <zeitpunkt> in H-Programmen wird die Bedingung
  whrend des gltigen Zeitbereichs nur einmal pro Sekunde wahr.
- Wenn die Zykluszeit der H-Programme lnger als 1 Sekunde betrgt, sorgt ein
  bestimmtes Verfahren dafr, dass Zeitpunkte nicht ausgelassen werden.
- Wenn die Systemzeit synchronisiert wird (z.B. per DCF77-Funkuhr), sind
  Abweichungen der Zeit (+/-1..3s) unvermeidbar. Ein Vorstellen der Systemzeit
  wird mit dem oben genannten Verfahren abgedeckt, ein Zurckstellen fhrt
  zu keinem erneuten Erkennen des Zeitpunkts, sofern die Abweichung geringer
  als -3s ist (U1600: n.v.).

Beispiel: h 10= 'IF 17.3 xh10.xx, rel 1=1,else, rel 1=0'
          Am 17.3 wird zu jeder vollen Stunde + 10 Minuten
          Relais 1 eine Minute lang aktiviert.

Betriebsdauerzhler-Zeit
========================
- Die Ext. '_' bei  ZEIT_ , TM_, TMD_, SYNC_/ , a=t_  usw. verwendet statt
  der Echtzeit die stets monoton wachsende Betriebsdauerzhler-Zeit (0 bei
  Master-Reset).
- Wichtig bei Zeitdauermessungen (z.B. whrend Sommerzeit/Winterzeit-
  Umschaltungen).
! Bitte beachten Sie den Stations-Bezug von Zeitabfragen, siehe ZEIT.

Zeitzhler
==========
- Zur ausschlielichen Verwendung in H-Programmen gibt es den Befehl HTD:
  Aufruf :      HTD
  Stack  :      - >>> <ZeitDeltaInSekunden>
  Auf den Stack wird die Zeitdifferenz seit dem letzten HTD Aufruf gepusht
  (fr jedes H-Programm separat). Zeiten grer 60s --> 0s.
- HTD* fhrt bei Ergebnis==0 ein EXIT aus:
  HTD*, ...     ist also identisch mit     HTD,DUP,0,==,IF,EXIT,ELSE,...

Beispiel zur Zeitzhlung (Sekunden) in den Kanlen 10..15, solange
  STARTSTOP vom jeweiligen Kanal = 1 ist:
        H 10 = 'HTD, DELTA 10..15=.'
  Oder in Stunden:
        H 10 = 'HTD, 3600,/, DELTA 10..15=.'
  Kopplung vom Eingang 10 an STARTSTOP 10:
        H 11 = 'IN- 10,STSP 10=.'

______________________________________________________________________________

<B>
